public void quickSort_asc(int[] array , int low , int high){
int i , j , x ;
if(low < high){//结束循环
i = low ;
j = high ;
x = array[low];//将第一个数作为中轴
while( i < j ){
while( i < j && array[j] > x){
j--;
}//当i>j时,说明array[j]已经到头了,j=0;当i<j,且array[j]<x时,说明右边全部比中轴array[low]大
if( i < j ){
array[i] = array[j];//此时array[j]在右边,且小于array[low],交换,使得右边全部大于中轴
i++;//左边从第二个数开始比较
}
while(i<j && array[i] < x){
i++;
}//当i=j时,说明array[i]已经到j了,i=j说明左边全部比中轴array[low]小;当i<j,
//且array[i]>x时,找到比x大的
if( i < j ){
array[j] = array[i];//此时array[j]在右边,且小于array[low],交换,使得右边全部大于中轴
j--;//右边从第二个数开始比较
}
array[i] = x;//将中轴给array[i],此时i!=low;
quickSort_asc(data, low, i - 1);//初始数组以i为界分为两个数组,此数组全部小于中轴
quickSort_asc(data, i + 1, high);//此数组全部大于中轴
}
}
}
将数组分成两部分,左边全部小于中轴,右边全部大于中轴,不断递归,每次递归将1个数组切为2个数组,直至i<j结束递归。
菜鸟学排序----快速排序
最新推荐文章于 2020-11-01 11:56:24 发布