基本思想:
1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
快速排序的示例:
(a)一趟排序的过程:
(b)排序的全过程
算法的实现:
#include"iostream"
using namespace std;
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void printArr(int arr[], int length)
{
for (int i = 0; i < length; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int Partition(int arr[], int start, int end)
{
int x = arr[end];
int p = start - 1;
for (int i = start; i < end; i++)
{
if (arr[i] <= x)
{
p = p + 1;
swap(&arr[p], &arr[i]);
}
}
swap(&arr[p + 1], &arr[end]);
return p + 1;
}
void QuickSort(int arr[],int start, int end)
{
if (start < end)
{
int x = Partition(arr, start, end);
printArr(arr, 10);
QuickSort(arr, start, x - 1);
QuickSort(arr, x + 1, end);
}
}
int main()
{
int arr[10] = { 10, 12, 9, 20, 8, 3, 7, 47, 6, 55};
printArr(arr, 10);
QuickSort(arr, 0, 9);
printArr(arr, 10);
system("pause");
}