算法之快速排序(golang)

喜欢ヅ旅行 2022-06-12 11:55 247阅读 0赞

code

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func swap(i, j int, a []int) {
  6. a[i], a[j] = a[j], a[i]
  7. }
  8. func partition(a []int, left, right int) int {
  9. pivotKey := a[left]
  10. pivotPointer := left
  11. for left < right {
  12. for left < right && a[right] > pivotKey {
  13. //先从右边开始 当小于a[left] 就停止
  14. right--
  15. }
  16. for left < right && a[left] <= pivotKey {
  17. //右边停止后 ,左边开始, 当大于a[left] 就停止
  18. left++
  19. }
  20. fmt.Println(a)
  21. swap(left, right, a) //把大的交换到右边,把小的交换到左边
  22. }
  23. swap(left, pivotPointer, a) //最后把piovt到中间
  24. return left
  25. }
  26. func QuictSort(a []int, left, right int) {
  27. if left >= right {
  28. //跳出递归
  29. return
  30. }
  31. pivotPos := partition(a, left, right)
  32. //递归
  33. QuictSort(a, left, pivotPos-1) //左边再次递归
  34. QuictSort(a, pivotPos+1, right) //右边再次递归
  35. }
  36. func main() {
  37. a := []int{
  38. 56, 32, 7, 69, 34, 521, 52}
  39. QuictSort(a, 0, len(a)-1)
  40. fmt.Println(a)
  41. }

结果

  1. quickSort time go run quickSort.go
  2. [56 32 7 69 34 521 52]
  3. [56 32 7 52 34 521 69]
  4. [34 32 7 52 56 521 69]
  5. [7 32 34 52 56 521 69]
  6. [7 32 34 52 56 521 69]
  7. [7 32 34 52 56 69 521]
  8. go run quickSort.go 0.18s user 0.36s system 81% cpu 0.658 total

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 排序算法快速排序

    > 快速排序。 > 从数组中取出一个基准数,遍历数组中的每个元素,与基准数比较大小,将小于基准数的元素放在其左侧,大于基准数的元素放在其右侧, >

    相关 排序算法快速排序

    同样的先上这张图  ![Center][] 下面分析交换排序之快速排序: 快速排序的思想是先选择一个基准元素(一般取第一个元素),然后对剩下的元素作两端遍历,左边找

    相关 排序算法快速排序

    快速排序的基本思想是:通过一趟排序将要排序的[数据分割][Link 1]成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行

    相关 排序算法快速排序

    快速排序是冒泡排序的改进版,也是最好的一种内排序,也是作为程序员必须掌握的一种排序方法。 快速排序的基本思想是 > 1、先从数列中取出一个数作为基准数 > 2、分区过程,

    相关 排序算法快速排序

    快速排序是一种高效的排序算法,它采用分而治之的思想,把大的拆分成小的,小的再拆分为更小的。 其原理是:对于给定的数组,通过一趟排序之后,将原序列分为两部分,其中前一部分的所