我是靠谱客的博主 幽默电话,最近开发中收集的这篇文章主要介绍用c实现花样排序算法(5)——快速排序(挖坑)1.“挖坑”算法的思想2.“挖坑”的实现 3.总结,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
目录
1.“挖坑”算法的思想
2.“挖坑”的实现
3.总结
1.“挖坑”算法的思想
“挖坑”的意思和字面上一样就是将一个数挖出来,再由另一个数把它填上。而为了达成排序的目的,我们可以有规律的将不同的数依次挖出,从而达成排序。
例如:
图中紫色部分数据可以看做key,每次挖坑的目标便是将key放在一个特殊位置上。保证key前面的数据都小于key,key后面的数据都大于key。通过这样操作,不难发现key就到了排序时的位置。
2.“挖坑”的实现
A.先简单阐述一下实现过程:
将第一个数先看成key,且挖一个坑pivot。定义一个begin和end,第一步:end向前找一个比key小的,填上坑并将找到的位置变成新的pivot。第二步:begin向后找一个比key大的,填上坑并将找到的位置变成新的pivot。最后循环这两步就可以排出一个key的位置了。排序就是重复上诉整个过程n次。
B.康康代码和结果吧(涉及递归):
void QuickSort(int* arr, int left, int right)
{
if (left >= right)//递归的结束条件
return;
int begin = left; int end = right;
int pivot = begin;//将第一个位置作为坑
int key = arr[begin];
while (begin < end)
{
//从后面往前找一个小于key的值
while (arr[end]>=key&&begin < end)//因为end和begin下面会进行++ --操作,所以要多一次判断。
end--;
arr[pivot] = arr[end];//将坑用第一个小于key的值“埋上”
pivot = end;//找到新的坑
//同理,从前往后找一个大于key的值
while (arr[begin] <= key&&begin < end)
begin++;
arr[pivot] = arr[begin];
pivot = begin;
}
//循环结束表示begin与end相遇,找到了适合key的“坑”
pivot = begin;
arr[pivot] = key;//“埋坑”第一次调整结束
//递归,将数组分为坑的左边与坑的右边
QuickSort(arr, left, pivot - 1);
QuickSort(arr, pivot + 1, right);
}
int main()
{
int arr[] = { 8, 5, 6, 9, 4, 2, 3, 1 };
int len = sizeof(arr) / sizeof(arr[0]);
QuickSort(arr, 0, len - 1);
Print(arr,len);
return 0;
}
3.总结
对比直接选择排序:
用c实现花样排序算法(4)——直接选择排序_不会敲代码的运气选手^的博客-CSDN博客
“挖坑”每次遍历次数更少,更为快捷。
最后
以上就是幽默电话为你收集整理的用c实现花样排序算法(5)——快速排序(挖坑)1.“挖坑”算法的思想2.“挖坑”的实现 3.总结的全部内容,希望文章能够帮你解决用c实现花样排序算法(5)——快速排序(挖坑)1.“挖坑”算法的思想2.“挖坑”的实现 3.总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复