快速排序概念
通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。主要采用分治法
和挖坑填数
等方法,分治法就是大问题分解成各个小问题,堆小问题求解,使得大问题得以解决。
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 <