1.基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2.单趟排序分析
我这里用的是左右指针的方法,下面具体的步骤以及代码的实现
代码实现:
int PortSort(int* arr, int begin, int end)//左右指针法
{
assert(arr);
int left = begin;
int right = end;
int mid = SelectMid(arr, begin, end);
swap(arr[mid], arr[end]);
int key = arr[end];//基准值
while (left < right)
{
while (left < right && arr[left] <= key)
{
left++;
}
while (left < right && arr[right] >= key)
{
right--;
}
if (arr[left] > arr[right])
{
swap(arr[left], arr[right]);
}
}
//把key放进去
swap(arr[left], arr[end]);
return left;
}
3.快速排序的实现
void QuickSort(int* arr, int begin, int end)
{
assert(arr);
if (begin < end)
{
int div = PortSort(arr, begin, end);
QuickSort(arr, begin, div - 1);
QuickSort(arr, div + 1, end);
}
}