思路:(1).分解:数组A【p...r】被划分为两个(可能为空)子数组A【p...q-1】和A【q+1...r】,使得A【p...q-1】中的每一个元素都小于等于A【q】,而A【q】也小于等于A【q+1...r】中的每个元素。其中,计算下标q也是划分过程的一部分。
(2)解决:通过递归调用快速排序,对子数组A【p...q-1】和A【q+1...r】进行排序。
(3)合并:因为子数组都是原址排序的,所以不需要合并操作:数组A【p...r】已经有序。
下面代码.....
#include<iostream>
using namespace std;
void quicksort(int *a, size_t p, size_t r);
size_t prtition(int *a, size_t p, size_t r);
int main()
{
int a[9] = { -999,2,8,7,1,3,5,6,4 };//-999不是我要排的数
quicksort(a, 1, 8);
for (size_t i = 1; i < 9; ++i)
cout << a[i] << " ";
cout << endl;
return 0;
}
void quicksort(int *a, size_t p, size_t r)
{
if (p < r)
{
size_t q = prtition(a, p, r);
quicksort(a, p, q - 1);
quicksort(a, q + 1, r);
}
}
size_t prtition(int *a, size_t p, size_t r)
{
size_t i = p - 1;
for (size_t j = p; j < r;++j)
if (a[r]>a[j])
{
std::swap(a[++i], a[j]);
}
std::swap(a[i + 1], a[r]);
return i + 1;
}