Golang算法-排序算法(快速排序)

本文介绍了快速排序的基本原理和步骤,包括寻找哨兵pivot、填坑法以及递归排序的过程。通过示例代码展示了如何在Go语言中实现快速排序,并给出了排序后的数组结果。快速排序是一种高效的排序算法,平均时间复杂度为O(n log n)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序

快速排序和递归排序有类似之处,但快速排序是先排序找边界,通过边界分组递归排序,所以快速排序总体分为两部:

1、寻找哨兵 pivot ,其左侧的元素都小于它,右侧的元素大于它,采用填坑法,一般先将数组头部定义为pivot并将其取出(其余留位置为一个“坑”)

2、递归,简单的递归排序

func sortArray(nums []int,left,right int) {
	//埋坑,比哨兵小的埋入left指针坑,哨兵大的买入right指针坑
  //第一递归的边界条件,递归数组长度须>0
	if left > right{
		return
	}
  //定义一个哨兵,取左侧第一位
	pivot := nums[left]
	i,j := left,right
  //遍历条件
	for i < j{
    //先右指针遍历,若大于哨兵,左移
		for nums[j] >= pivot && i<j{
			j--
		}
    //若小于哨兵,填坑
		nums[i] = nums[j]
    //同理左指针遍历,若小于哨兵,右移
		for nums[i] <= pivot && i<j{
			i++
		}
		nums[j] = nums[i]
	}
    //哨兵填入剩余坑中,完成第一次排序
	nums[i] = pivot
    //以哨兵为界限,分别递归左右两侧
	sortArray(nums,left,i-1)
	sortArray(nums,i+1,right)
}

运行结果:

func main() {
	a  := []int{4,3,2,5,7,9,12,42,5,6,3,2,1,5}
	sortArray(a,0,len(a)-1)
	fmt.Println(a)
}
//结果
[1 2 2 3 3 4 5 5 5 6 7 9 12 42]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值