这个选择排序代码有什么问题?

时间:2013-09-17 13:55:41

标签: java algorithm sorting selection-sort

我被要求做出选择排序算法,但它不起作用,我不知道为什么。这是代码:

    int count = 0;
    int count2;
    int min;
    int size = scan.nextInt();
    int temp = 0;
    int[] numbers = new int[size];

    while (count < size) {
        numbers[count] = scan.nextInt();
        count ++;
    }
    count = 0;
    while (count < size) {
        count2 = size;
        min = numbers[count];
        while (count < count2) {
            count2 --;
            if (numbers[count2] < numbers[min]) {
                min = count2;
            }
        }
        temp = numbers[temp];
        numbers[temp] = numbers[count];
        numbers[count] = temp;
        count ++;
    }

    count = 0;
    while (count < size) {
        System.out.println(numbers[count]);
        count ++;
    }   
}

输入: 10 1 0 2 9 3 8 4 7 五 6

输出: 1 2 9 8 3 3 8 4 7 4

4 个答案:

答案 0 :(得分:1)

在while循环中,您尝试使用numbers [0]元素作为数字索引[] numbers[min]

min = numbers[count]; \\min is value of first element of numbers[]
    while (count < count2) {
        count2 --;
        if (numbers[count2] < numbers[min]) {  \\ you try to use value of numbers[0] element as index of numbers[] aray.
            min = count2;
        }

使用if (numbers[count2] < numbers[min])替换(numbers[count2] < min)

答案 1 :(得分:0)

temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;
count ++;

再看看这段代码。

如果你在第一个输入为11的情况下运行它,那么当索引超出范围时会出错。

特别是,您计划用temp = numbers[temp]完成什么?你将temp分配给基本上是一个任意数字,因为numbers[0]可以是任何东西。

答案 2 :(得分:0)

您在输出中获得重复值(不在输入中)这一事实意味着您的交换不起作用,因此:

temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;

错了。

应该是min,而不是temp

temp = numbers[min];
numbers[min] = numbers[count];
numbers[count] = temp;

答案 3 :(得分:0)

这是一种算法,可以在java中使用for的强大功能。要查看数组或列表,您可以执行for (int current : array)这比使用while或for like更方便。

    int min;
    int mem = 0;
    int size = 11;
    int [] numbers = {10, 1, 0, 2, 9, 3, 8, 4, 7, 5, 6};

    for (int i=0; i<size-1; i++){
        min =i;
        for(int j=i+1; j<size; j++){
            if (numbers[j]<numbers[min]){
                min = j;
            }
        }

        // swap
        mem= numbers[i];
        numbers[i] = numbers[min];
        numbers[min] = mem;

    }

    for (int toPrint : numbers){
        System.out.println(toPrint);
    }

}