这是我自己写的一个快速排序,但我测试后发现错误。自己看了好多遍还是不知道哪错了,希望大神解答。
package 第二阶段代码;
//快速排序
public class Quick {
public static void Sort(int[] arr) {//使用sort方法传递一个数组,并调用method()方法
method(arr,0,arr.length-1);
}
private static void method(int[] arr, int first, int last) {//method()方法,定义两个索引
if(last <= first) {//当前后两个索引相交时,停止排序
return;
}
int number = getNumber(arr,first,last);//获取切分点
method(arr,first,number - 1);//以切分点为界,左边的数组进行排序
method(arr,number + 1, last);//以切分点为界,右边的数组进行排序
}
private static int getNumber(int[] arr, int first, int last) {//获取切分点
int i = first, j = last + 1;//获取数组两边的指针(即从两边开始移动)
int choice = arr[first];//把第一个元素的值定义为切分点
while(true) {
while(arr[++i] < choice) {//当左边的数小于切分点,继续运行
if(i == last) {//当左边的数大于切分点时,跳出循环
break;
}
}
while(choice < arr[--j]) {//当右边的数大于切分点,继续运行
if(j == first) {//当右边的数小于切分点时,跳出循环
break;
}
}
if(i >= j) {//两者相交时退出方法
break;
}
int temp = arr[j];//调换位置
arr[j] = arr[i];
arr[i] = temp;
}
int temp2 = choice;//把切分点移动中间
choice = arr[j];
arr[j] = temp2;
return j;
}
}