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

时间:2013-11-19 00:14:09

标签: java sorting

所以我正在制作一个简单的排序程序,但排序方法返回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 100 4 6 5

快速排序后的

数组 1 6 3 2 9 10 100 4 6 5

如果上面提到的数字变为0,那么“快速排序之后的数组”将被打印在所有0中,例如

快速排序后的

数组 0 0 0 0 0 0 0 0 0 0

2 个答案:

答案 0 :(得分:1)

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项进行排序。

答案 1 :(得分:0)

您可以使用Arrays.sort(data)进行排序,而不是使用所有混乱的代码:)