void swap(int* a,int* b){
int tmp=a;
a=b;
b=tmp;
}
//在给定的[start,end]区间内随机取一个值,分成大于它和小于它的两拨
//返回选定值在分完拨之后的下标
int partition(int data[],int len,int start,int end){
if(data==NULL||len<=0||start<0||end>len)
throw exception("invalid parameter.");
//随机取一个区间内值,并将其换到区间最末尾
int index=Random(start,end);
swap(&data[index],&data[end]);
int small=start-1;
for(i=start;i<end;++i){
if(data[i]<data[end]){
//small++后代表大于选定值的第一个数的下标
//如果不存在大于选定值的数字则代表当前比较的数字下标
++small;
if(small<i){
//交换后small代表小于选定值的最后一个数字的下标
swap(&data[small],&data[i])
}
}
}
//small++后代表大于选定值的第一个数的下标
++small;
swap(&data[small],&data[end]);
return small;
}
void QuickSort(int data[],int len,int start,int end){
//递归结束条件
if(start==end) return;
int index=partition(data,len,start,end);
if(index>start){
QuickSort(data,len,start,index-1);
}
if(index<end){
QuickSort(data,len,index+1,end);
}
}
剑指offer 快速排序
最新推荐文章于 2022-04-09 13:28:56 发布