快速排序也写了好多次每次写都有毛病 ,这次认真总结了一下
这是我的第一篇博客 希望自己可以养成写博客的好习惯!
如果有不对的地方欢迎指正
谢谢各位!
void quicksort(int a[],int l,int r){
int i = l;
int j = r;
if(i > j)
return ; //每一步必须判断 i 和 j 之间的大小关系;
int temp = a[l];
while(j != i ){
while(a[j] >= temp && j > i){
j--;
} // 必须要先从大的开始减 以确保不会越界;
while(a[i] <= temp && j > i){
i++;
}//如果a[i]和temp相同 那也没有必要调换 所以要加上a[i] <=temp;
if(j > i) // 如果不判断 不能确定i和j之间的大小关系;
swap(a[j],a[i]);
}
swap(a[j],a[l]);
quicksort(a,l,i-1); // 排到这里 i 的位置就固定好了 不用再进行判断了!,所以是i-1;
quicksort(a,i+1,r);
}