快速排序C语言详细版

快速排序本质上就是两个指针交替进行以及基本的递归

大致思路:
1.我们需要选定一个中心点(pivot)
2.大于中心点的数字放在中心点的左边
3.小于中心点的数字放在中心点的右边
4.重复上述步骤直到排序结束

/*快速排序,传入数组arr,左指针left,右指针right*/
void quickSort(int *arr,int left,int right)
{
	int pivot = arr[left];/*选取一个中心点,一般是最左边,也就是左指针的位置*/
	wile(left<right){//左指针一定要保证在右指针左边
		while(arr[right]>=pivot) right--;//右指针向左移动一格
		//右指针所指向的数一定要大于等于中心点这样右指针才能向左移动,不然就是左指针的范围了,这个也很好理解
		arr[left]=arr[right];//如果右指针所指向的数小于中心点,也就是不满足上面while()循环,那就将右指针指向的数放在左指针指向的位置
		while(arr[left]<=pivot) left++;
		/*左指针指向的值如果是小于中心点的话就将左指针向后移动一格*/
			arr[right]=arr[left];//如果左指针指向的值大于中心点的话,就将左指针的值付给右指针
	}
	arr[left]=pivot;//不满足left<right的时候,也就是左右指针重合的时候就将中心点付给左指针指向的值
	/*递归重复上述操作,进行排序*/
	/*这里的right-1和right+1也许有人会不懂,我第一次看的时候就不太懂,其实很好理解,就是将原本的一大块内容拆分成了两小块,左边就相当于是[left,right-1],右边就相当于是[right+1,right]这两个区间,这里的right其实就是两个小块之间的分界点pivot*/
	quickSort(arr,left,right-1);
	quickSort(arr,right+1,right);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值