gpt4 book ai didi

Java排序错误,打印出0的数组而不是数组的值

转载 作者:行者123 更新时间:2023-12-01 13:49:42 25 4
gpt4 key购买 nike

所以我正在制作一个简单的排序程序,但排序方法返回 0,而不是正在排序的数组的数字。也许有人可以解释为什么会发生这种情况。数字本身取自 .txt 文件,然后按数字顺序排序。

    import java.io.File;
import java.util.Scanner;

public class quickSort{
public static void main(String[] args) throws Exception {

File infile = new File("input.txt");
Scanner input = new Scanner(infile);

int[] data = new int[100];
int x, count;

count = 0;
while (input.hasNext()){
x = input.nextInt();
data[count++] = x;
}

System.out.println("Array before Sort");
for (int i = 0; i < count; i++){
System.out.printf(" %d", data[i]);
if ((i+1)%7==0) System.out.println();
}

quicksort(data, count);

System.out.println("\n\nArray after quickSort");
for (int i = 0; i < count; i++){
System.out.printf(" %d", data[i]);
if ((i + 1)%7==0) System.out.println();
}
System.out.println();
}

public static void quicksort(int[] data, int count) {
quicksortHelper(data, 100, data.length - 1);
}

更改此行上方 0 到 100 之间的代码会稍微修改输出。

    protected static void quicksortHelper(int[] data, int bottom, int top){
if (bottom < top) {
int midpoint = partition(data,bottom,top);
quicksortHelper(data, bottom, midpoint -1 );
quicksortHelper(data, midpoint + 1, top);
}
}
protected static int partition(int[] data, int bottom, int top){
int pivot = data[top];
int firstAfterSmall = bottom;
for (int i = bottom ; i < top; i++){
if (data[i] <= pivot) {
swap(data, firstAfterSmall, i);
firstAfterSmall++;
}
}
swap(data, firstAfterSmall, top);
return firstAfterSmall;
}

protected static void swap(int[] data, int i, int j){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}

感谢任何帮助,我的大脑快要爆炸了。

示例输出:排序前的数组1 5 3 2 9 10 1004 6 5

快速排序后的数组1 6 3 2 9 10 1004 6 5

如果上面提到的数字都改为0,那么“快速排序后的数组”就会被打印为全0,这样

快速排序后的数组0 0 0 0 0 0 00 0 0

最佳答案

quicksort 方法中,您使用参数 (100, data.length - 1) 调用 quicksortHelper。这将对数组的最后一个元素进行排序,但这没有多大帮助。将其更改为:

quicksortHelper(data, 0, count);

就总是打印 0 而言,没有进一步的洞察力,除了检查 input.txt 中的数据并确保其中恰好有 100 个整数等之外,没有什么帮助,否则你的数组值没有被初始化。

虽然我认为这是一个作业,而不是重新发明轮子,但您将来始终可以调用 Arrays.sort 来完成此任务。

编辑:

第二个参数应该是 count 而不是 data.length - 1,否则,您将对包含 ~ 90 个 0 的数组进行排序,然后仅打印出来前10个,排序后全部为0。因此,您只想对前 count 项进行排序。

关于Java排序错误,打印出0的数组而不是数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060666/

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