数组排序任务可以如下完成:
1.设k=a[0],将k挪到适当位置,使得比k小的都在k的左边,比k大的都在k的右边,和k相等的左右都可以(在O(n)时间内完成)
2.把k左边的部分快速排序
3.把k右边的部分快速排序
此过程中需要一个交换函数(Swap),当k的左边比k大时,需要和k交换位置,同理右边也是
#include <iostream>
using namespace std;
void Swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
void QuickSort(int a[], int s, int e)
{
if (s >= e)
return;
int k = a[s];
int i = s;
int j = e;
while (i != j)
{
while (j > i && a[j] >= k)
j --;
Swap(a[i], a[j]);
while (i < j && a[i] <= k)
i ++;
Swap(a[i], a[j]);
}
//结束后,a[i]为k,此时满足了a[i]左边比它小,右边比它大,因此下一轮就可以不讨论a[i]处
QuickSort(a, s, i-1);
QuickSort(a, i+1, e);
}
int a[] = {93,27,30,2,8,12,2,8,30,89};
int main()
{
int Size = sizeof(a)/sizeof(int);
QuickSort(a, 0, Size-1);
for (int i = 0; i < Size; i ++)
{
cout << a[i] << " ";
}
cout << endl;
system("pause");
return 0;
}