问题
将一个数组从小到大排序
解决
选择一个数字a(可以是要排序数组里任意数字,这里直接选择排序的中间数字),把小于a的数放在数组左边,把大于a的数组移到数组右边;再对左边和右边的两个子数组排序(即递归操作)
代码
static void Swap(int *a,int *b){
int p=0;
p=*a;
*a=*b;
*b=p;
}
int Partition(int *data,int length,int start,int end){
if(data==nullptr||length<=0||start<0||end>=length)
throw "Invalid Parameters";
int index=(end+start)/2;
Swap(&data[index],&data[end]);
int small=start-1;
for(index=start;index<end;++index){
if(data[index]<data[end]){
++small;
if(small!=index)
Swap(&data[index], &data[small]);
}
}
++small;
Swap(&data[small], &data[end]);
return small;
}
void QuickSort(int *data,int length,int start,int end){
if(start==end)
return;
int index=Partition(data,length,start,end);
if(index>start)
QuickSort(data, length, start, index-1);
if(index<end)
QuickSort(data, length, index+1, end);
}