#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];
}
}