在 Java 中使用排序算法

Using a sort algorithm in Java

我试图根据我们的编程讲座使用排序算法。也许我只是错过了一些东西。

如果有人能帮助我或对我犯的任何错误给予提示,我将不胜感激。

这是我当前的代码:

package Sortieralgorithmus;

public class sort {

public static int[] straightSelection(int[] numbers) {

    for (int i = 0; i < numbers.length; i++) {
        int smallestIndex = i;

        for (int j = i + 1; j < numbers.length; j++) {
            if (numbers[i] < numbers[smallestIndex]) {
                smallestIndex = j;
            }
        }
        swap(j, i, numbers);


    }

    return numbers;
}
}

您正在进行就地选择排序。 更改

if (numbers[i] < numbers[smallestIndex]) 

if (numbers[j] < numbers[smallestIndex]) 

也改

(int i = 0; i < numbers.length; i++)

(int i = 0; i < numbers.length()-1; i++)

此外,因为 i 和 j 是在您的 for 条件中声明的,所以 它们只能在 for 循环范围内访问 。相反,在循环之外声明它们。

最后,最好在交换它们之前检查 if(smallestIndex != i)

这是你的工作代码,假设你的交换功能正常工作。

package Sortieralgorithmus;

public class sort {

public static int[] straightSelection(int[] numbers) {
int i, j;  // declare them here 
int smallestIndex; //declare it here as well

for (i = 0; i < numbers.length-1; i++) {
    smallestIndex = i;

    for (j = i + 1; j < numbers.length; j++) {
        if (numbers[j] < numbers[smallestIndex]) {
            smallestIndex = j;
        }
    }
    if(smallestIndex != i){
    swap(smallestIndex, i, numbers);
    }

}

return numbers;
}
}

请参考以下内容:http://en.wikipedia.org/wiki/Selection_sort

下面是我对swap命令的实现(抱歉声明错误,我已经认出来了,我会马上修改!):

package Sortieralgorithmus;

public class Swap {

public static void swap(int a, int b, int []numbers) {

    int temp = numbers[a];
    numbers[a] = numbers[b];
    numbers[b] = temp;

}

}