代码错误以,没有对相等值进行考虑进入死循环
public static void main(String[] args) {
int a[]={-9,78,0,23,-567,70,23};
sort(a,0,a.length-1);
System.out.println(Arrays.toString(a));
}
public static void sort(int[]arr,int le,int ri){
int left = le;
int right = ri;
if (left>=right){
return;
}
int num = arr[(left+right)/2];
while (left<right){
while (arr[left]<num){
left+=1;
}
while (arr[right]>num){
right-=1;
}
if (left>=right){
break;
}
int tem =arr[left];
arr[left]=arr[right];
arr[right]=tem;
}
}
改法:
public static void sort(int[]arr,int le,int ri){
int left = le;
int right = ri;
if (left>=right){
return;
}
int num = arr[(left+right)/2];
while (left<right){
while (arr[left]<num){
left+=1;
}
while (arr[right]>num){
right-=1;
}
if (left>=right){
break;
}
int tem =arr[left];
arr[left]=arr[right];
arr[right]=tem;
//对值进行判断防止进入死循环
if (arr[left]==num){
left+=1;
}
if (arr[right]==num){
right-=1;
}
//防止上面的地址越界
if (right ==left){
left+=1;
right-=1;
}
}
记得考虑一下数组越界问题。