用Go语言 实现快速排序 (Golang经典编程案例)
选择排序,代码如下:package mainimport ("fmt")//left 表示 数组左边的下标,right 表示数组右边的下标,array 表示要排序的数组func QuickSort(left int, right int, array *[7]int) {l := leftr := right// pivot 是中轴, 支点pivot := arr...
·
快速排序,代码如下:
package main
import (
"fmt"
)
//left 表示 数组左边的下标,right 表示数组右边的下标,array 表示要排序的数组
func QuickSort(left int, right int, array *[7]int) {
l := left
r := right
// pivot 是中轴, 支点
pivot := array[(left + right) / 2]
temp := 0
//for 循环的目标是将比 pivot 小的数放到 左边,比 pivot 大的数放到 右边
for ; l < r; {
//从 pivot 的左边找到大于等于pivot的值
for ; array[l] < pivot; {
l++
}
//从 pivot 的右边边找到小于等于pivot的值
for ; array[r] > pivot; {
r--
}
// 1 >= r 表明本次分解任务完成, break
if l >= r {
break
}
//交换
temp = array[l]
array[l] = array[r]
array[r] = temp
//优化
if array[l]== pivot {
r--
}
if array[r]== pivot {
l++
}
}
// 如果 1== r, 再移动下
if l == r {
l++
r--
}
// 向左递归
if left < r {
QuickSort(left, r, array)
}
// 向右递归
if right > l {
QuickSort(l, right, array)
}
}
func main() {
arr := [7]int {78, 0, 27, -5, 123, 90, -23}
fmt.Println("初始数组为:", arr)
QuickSort(0, len(arr) - 1, &arr)
fmt.Println("快速排序之后数组为:",arr)
}
执行结果如下图:
更多推荐
所有评论(0)