#include<iostream.h>
// 切分數據爲左右兩個部分,返回中間元素x的編號
// 主要的過程就是:選擇一個元素x作爲分界點,將比x大的元素放到x右邊,其餘放到x左邊。
int Partition (int* Array, int nLower, int nUpper)
{
int nLeft = nLower + 1;
int Pivot = Array[nLower];
int nRight = nUpper;
int Swap;
while (nLeft <= nRight)
{
while (nLeft <= nRight && Array[nLeft]<=Pivot)
nLeft = nLeft + 1;
while (nLeft <= nRight && Array[nRight]> Pivot)
nRight = nRight - 1;
if (nLeft < nRight)
{
Swap = Array[nLeft];
Array[nLeft] = Array[nRight];
Array[nRight] = Swap;
nLeft = nLeft + 1;
nRight = nRight - 1;
}
}
Swap = Array[nLower];
Array[nLower] = Array[nRight];
Array[nRight] = Swap;
return nRight;
}
void QuickSort(int* Array, int nLower, int nUpper)
{
// 測試是否排序完畢
if (nLower < nUpper)
{
// 分解和分別進行排序
int nSplit = Partition (Array, nLower, nUpper);//數據切分爲兩個部分
QuickSort (Array, nLower, nSplit - 1);//左半部分遞歸排序
QuickSort (Array, nSplit + 1, nUpper);//右半部分遞歸排序
}
}
void main()
{
int i[]={2,4,5,3,1,9,10,11,6,8,7};
int j=sizeof(i)/sizeof(int);
QuickSort(i,0,j);
for(int ii=0;ii<j;ii++)
{
cout<<i[ii];
}
}