Go语言实现快速排序

快速排序

1. 排序过程

​ 快速排序的基本思想是通过一趟排序将排序的数据分割成独立两部分,其中一部分的所有数据都比另一部分小,再采用递归方式,以使得整个数组变得有序。

2. 代码实现
func quickSort(arr []int, left ,right int)   {		//递归实现快排
	
	if left >= right {											//如果左指针大于等于右指针,结束递归
		return
	}
    
	l,r,cur := left,right,arr[left]
	for l < r	{									//指针循环,当l == r的时候说明所有的值都被遍历完
		
        
	//因为这里的基准cur取的是左边的端点arr[left],所以先移动右边的指针,最后要和左边的值互换,因此要先移动右指针
		for l < r && arr[r] >= cur {				//如果满足l< r 并且 r的值大于基准值时,r指针左移
					r --
				}

		for l < r && arr[l] <= cur{					//相同,如果l<r 并且l的值小于 基准值,l指针右移
					l ++
				}
        //两种情况,要么l == r
        //要么 arr[l] < cur 并且arr[r] > cur

		arr[l],arr[r] = arr[r],arr[l]				//
		
	}

	arr[left],arr[r] = arr[r],arr[left] 		//将cur和中间的值交换

	quickSort(arr,left,l - 1)					//向左递归
	quickSort(arr,l +1,right)				//向右递归
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值