快速排序概念
通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。主要采用分治法和挖坑填数等方法,分治法就是大问题分解成各个小问题,堆小问题求解,使得大问题得以解决。
1.挖坑法
1.1 递归
思路:
挖坑法思路与hoare版本(左右指针法)思路类似
①选出一个数据(一般是最左边或是最右边的)存放在key变量中,在该数据位置形成一个坑
②还是定义一个L和一个R,L从左向右走,R从右向左走。(若在最左边挖坑,则需要R先走;若在最右边挖坑,则需要L先走)
后面的思路与左右指针法思路类似
单趟动图如下:

//快速排序法 挖坑法
void QuickSort1(int* arr, int begin, int end)
{
if (begin >= end)
return;
int left = begin,right = end;
int key = arr[begin];
while (begin < end)
{
//找小
while (arr[end] >= key && begin < end)
{
--end;
}
//小的放到左边的坑里
arr[begin] = arr[end];
//找大
while (arr[begin] <= ke

最低0.47元/天 解锁文章
2801

被折叠的 条评论
为什么被折叠?



