快速排序,代码如下:

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)

}

执行结果如下图:
在这里插入图片描述

Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐