快速排序 复杂度log n;(分治思想) 运用递归;
坑点:开始的位置在右边(代码讲解后解释)
代码解释很详细。
//对数组x--y这个区间进行排序
void qsort(int a[],int x,int y ){
int i=x;//区间最左
int j=y;//区间最右
if(x>y) return ;
int temp=a[i];
while(i!=j){
while(a[j]>=temp&&i<j) j--; //找比基数小的数
while(a[i]<=temp&&i<j) i++;//找比基数大的数
int k=a[i];a[i]=a[j];a[j]=k;//对换
}
a[x]=a[i];
a[i]=temp;
//把基数与放在中间 ,
//保证了左边的数比基数小
//右边的比基数大;
qsort(a,x,i-1);//对之前的区间进行排序
qsort(a,i+1,y);//对之后的区间进行排序
}
首先举个例子,4 2 1 3 4
从左和从右是不一样的。。。自行领会;
呜~~~~我这才刚理解。