java - 选择排序 - 交换下一个最小的与最小的整体

标签 java algorithm sorting selection-sort

我有一个关于选择排序的问题。在下面的例子中 -

12 8 7 5 2

下一步是什么

8 12 7 5 2

2 8 7 5 12

?

原因是从伪代码来看,我们似乎只是在寻找first元素,其值小于现有的first,而不是最小的整体。所以按照这个逻辑,要与 12 交换的元素应该是 8 而不是 2,对吧?

这是我正在使用的伪代码 -

static int[] selectionSort(int[] input) {
    if (input.length == 0) {
        return null;
    }
    else {
        int pos = -1;
        for (int i=0;i<input.length-1;i++) {
            pos = i;
            for (int j=i+1;j<input.length;j++) {
                if (input[j] < input[pos]) {
                    int temp = input[pos];
                    input[pos] = input[j];
                    input[j] = temp;
                }
            }
        }
    }
    return input;
}

我的理解有问题吗? 2 个步骤中哪一个是正确的?代码应该理想地产生第一个选项,不是吗?

谢谢!

最佳答案

你开始于:

12 8 7 5 2

您从已排序部分中没有元素开始,然后遍历直到找到未排序部分中的最小元素。然后将其与未排序部分中的第一个元素交换。

sorted  |  unsorted
2          8 7 5 12

迭代直到找到最小的,并与未排序部分中的第一个交换:

sorted  |  unsorted
2 5         7 8 12

重复几次(不需要交换,因为元素已经按顺序排列):

sorted  |  unsorted
2 5 7       8 12

sorted  |  unsorted
2 5 7 8     12

sorted  
2 5 7 8 12

所以你的第二个例子是正确的第一步。

关于java - 选择排序 - 交换下一个最小的与最小的整体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48617868/

相关文章:

java - 如何将字符串转换为 Java 字符串文字?

.net - 计算 .Net BitArray 类中设置的位

javascript - 递归树算法如何实现到嵌套递归数组

linux - En_US 和 en_US 之间的区别?

c# - Xamarin Forms - 相当于 CollectionViewSource

javascript - 提取 PostgreSQL 语法规则

java - 如何在 swt list eclipse 中禁用列表元素

java - JAXB 大字节[]字段

c++ - 什么数据结构用于范围搜索?

php - Sonata Admin List View,制作更多标题排序按钮?