//快速排序
//交换数组中array[low,high]的记录,使枢轴左边的元素都小于枢轴,右边的元素都大于枢轴
int Partition(int *array,int low,int high)
{
//以第一个元素为轴
array[0] = array[low];//用子表的第一个记录作为枢轴记录
while ( low < high )
//从表的两端交替地向中间扫描
{
while( low < high && array[high] > array[0])
{
--high;
}
array[low] = array[high];
//将比枢轴小的记录移到低端
while( low < high && array[low] < array[0] )
{
++low;
}
array[high] = array[low];
//将比枢轴大的记录移到高端
}
array[low] = array[0];//枢轴归位
return low;//返回枢轴位置
}
//快速排序
void QSort(int * array,int low,int high)
{
if( low < high)//长度大于1
{
int pivotloc = Partition(array,low,high);
//将表L一分为二
QSort(array,low,pivotloc-1);
//对低子表递归排序
QSort(array,pivotloc+1,high);
//对高子表递归排充
}
}
//注意第一个元素的特殊性,既下标为0的
void main()
{
int array[] ={-1,5,7,6,3,2,1,9,10};
QSort(array,1,sizeof(array)/sizeof(int)-1);
}