为什么我的选择排序代码不起作用?

时间:2015-11-30 20:24:39

标签: java arrays sorting

我有这个功能用于选择排序:

public static void selectionSort(int[] n)
{
    for(int start = 0; start < n.length; start++)
    {
        int smallest = start;

        for(int i = start+1; i<n.length; i++)
            {if(n[i]<n[start])
                smallest = i;}

        int tmp = n[start];
        n[start] = n[smallest];
        n[smallest] = tmp;
    }
}

我称之为。

Random ran = new Random();
    int n = 10;
    int[] a = new int[n];

    for(int i = 0; i<n; i++)
        a[i] = ran.nextInt(1000);

然而,它会导致这样的结果..

640 900 610 168 650 610 527 356 802 486

486 640 356 168 610 527 610 650 802 900

最上面的一个没有排序,下面的一个应该排序。但是,这是不正确的。

3 个答案:

答案 0 :(得分:4)

您正在比较每个单一迭代的初始 keep_track = [] def recursion(input_string, finding_name): list_names = basically would do this the first time for item in list_names: if item is A SINGLE WORLD: if name is finding_name: keep_track append name else name is A LIST WITH MULTIPLE WORDS: recursion(item, finding_name) return list_names 索引,即使您找到了较小的数字,您仍然将它与原始start进行比较,这不应该发生。找到较小的数字后,您需要使用该索引进行比较。

将其与每次迭代的最小数量进行比较start更改为(n[i]<n[start]),这将解决您的问题。

希望这有帮助!

答案 1 :(得分:1)

第二个循环没用,因为你只是比较第一个和最后一个项目而smallest仅从这个比较中获取它的值。 通过你的代码,我猜你试图做Bubble Sort,但比较和索引管理是错误的,这是一个可行的解决方案:

public static void main(String[] args) {
    Random ran = new Random();
    int n = 10;
    int[] array = new int[n];

    for (int i = 0; i < n; i++) {
        array[i] = ran.nextInt(1000);
    }

    printArray(array);
    selectionSort(array);
    printArray(array);
}

private static void printArray(int[] array) {
    System.out.print("Array: ");
    for (int i : array) {
        System.out.print(i + " ");
    }
    System.out.println();
}

private static void selectionSort(int[] array) {
    for (int j = 0; j < array.length; j++) {
        // Subtract 1 so you don't get a NullPointerException
        // Subtract j so you don't compare the numbers already ordered
        for (int i = 0; i < array.length - 1 - j; i++) {
            if (array[i] > array[i + 1]) {
                int tmp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = tmp;
            }
        }
    }

}

该算法来自上面链接的Spanish version(我来自阿根廷),也是英文版的其他符号。

希望这会有所帮助。最好的问候

答案 2 :(得分:-1)

尝试使用此版本的代码功能:

    public static void main(String[] args) {
    Random ran = new Random();
    int n = 10;
    int[] a = new int[n];
    for (int i = 0; i < n; i++)
        a[i] = ran.nextInt(1000);
    selectionSort(a);
    for (int i : a) {
        System.out.print(i+" ");
    }
}

public static void selectionSort(int[] n)
{
    for(int start = 0; start < n.length-1; start++)
    {
        int smallest = start;

        for(int i = start+1; i<n.length; i++)
        {if(n[i]<n[smallest])
            smallest = i;}

        int tmp = n[start];
        n[start] = n[smallest];
        n[smallest] = tmp;
    }
}