我已经实现了quicksort
使用列表作为支点的第一个元素算法,它能正常工作。 现在我refactored
选择一个随机指数为支点元素,交换的第一个元素,并做快速排序子程序。 在某种程度上,这是行不通的,我不明白排序的数组。 这里是我的代码,这是不言自明的,但我很高兴,如果任何澄清需要解释。
public class Qsort {
public static void quickSort2(int[] arr, int i, int j){
if (i<j){
int part =randPartition(arr, i, j);
quickSort2(arr, i, part-1);
quickSort2(arr, part+1, j);
}
}
public static int randPartition(int[] arr, int start, int end){
//int pivId = (int)(Math.random()*(end-start)+1)+start; -- *****
int pivId = start;
//System.out.println("pivId is "+ pivId + "; start is " + start + "; end is " + end);
System.out.println("arr is "+ Arrays.toString(arr));
int pivot = arr[pivId];
swap(arr, start, pivId);
int i = start;
for (int j = start+1;j<=end;j++){
if (arr[j]<pivot){
i++;
swap(arr,i,j);
}
}
swap(arr, start,i);
return i;
}
private static void swap(int[] arr, int index1, int index2) {
int temp = arr[index1];
arr[index1]=arr[index2];
arr[index2]=temp;
}
public static void main(String[] args) {
int[] data2 = new int[]{10,11,9,7,5};
System.out.println("Unsorted array data " + Arrays.toString(data2));
quickSort2(data2, 0, data.length-1);
System.out.println("Sorted array data " + Arrays.toString(data2));
}
}
我已经注释掉random pivot calculation in the code with *****
。 我没有看到任何问题,但具有随机摆动计算破坏代码