对于学校,我必须为一个字符串数组写一个快速排序。我认为我的分区很好但是我一直收到错误的递归。
public static int partition(String[] input, int max) {
// pivot is dividing point
// I keeps track of lesser values
// count is just a counter
// Pivots in place
int pivot = 0;
int i = 1;
int count = 1;
while (count <= max) {
if (input[count].compareTo(input[pivot]) < 0) {
input[i] = input[count];
i = i + 1;
}
if (count == max) {
input[i] = input[pivot];
input[pivot] = input[i];
}
count++;
}
return pivot;
}
public static void qSort(String[] input) {
int index = partition(input, input.length - 1);
int count = 0;
if (count < index - 1) {
partition(input, index - 1);
}
if (index + 1 < count && count < input.length) {
partition(input, input.length - 1);
}
count++;
}
答案 0 :(得分:0)
您的实施有很多错误。首先,您始终选择枢轴作为阵列索引0处的元素。 quicksort的想法是你选择一个pivot,在它周围分割数组,然后递归地在所选枢轴周围的两个分区上应用quicksort。如何识别您将以递归方式调用quicksort的分区的开始和结束?您需要将这些作为参数传递给您的分区方法,就像其他人在评论中提到的那样,对于quicksort方法本身也是如此。
10/206381035675/1444667249719
显然,这不是选择枢轴的最佳方式,因为某些阵列会使算法的性能非常差。一种更好的方法是每次都使用随机数据。