gpt4 book ai didi

java - Java 中的随机快速排序需要一个小的修复?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:28 25 4
gpt4 key购买 nike

我已经实现了 quicksort 算法,该算法使用列表的第一个元素作为基准,并且运行良好。现在我重构选择一个随机索引作为枢轴元素,与第一个元素交换并执行快速排序子例程。不知何故,它不起作用,我没有得到排序的数组。这是我的代码,不言自明,但如果需要任何说明,我很乐意解释。

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));
}
}

我已经用*****注释掉了代码中的随机枢轴计算。我看不出有任何问题,但是进行随机枢轴计算会破坏代码

最佳答案

您的其余代码没问题,但是

int pivId = (int)(Math.random()*(end-start)+1)+start; -- *****

有一些问题。考虑 end == start,然后你得到 pivID == 1+start。

关于java - Java 中的随机快速排序需要一个小的修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com