java - 修改后的选择排序,选择最大的数字

标签 java arrays selection sorting

我正在尝试编写一个修改后的选择排序,它选择最大的数字并将其放置在列表的末尾。我遇到了问题。该代码对列表进行了某种排序,但并不完美。这是我运行代码后的结果: 选择排序前:[2,8,7,1,3,5,9,4,6] 选择排序后:[1, 2, 8, 7, 3, 4, 5, 9, 6]

这是我的代码:

public static int[] sort(int[] list) {
int i, j, maxNum, maxInde, temp = 0;
    for (i = list.length-1; i >= 0; i--) {
        maxNum = list[i];
        maxInde = i;
        for (j = i; j < list.length; j++) {
            if (list[j] < maxNum) {
                maxNum = list[j];
                maxInde = j;
            }
        }
        if (maxNum < list[i]) {
            temp = list[i];
            list[i] = list[maxInde];
            list[maxInde] = temp;
        }
    }
    return list;
}  

不知道问题出在哪里。

最佳答案

该算法在概念上存在缺陷,因为您从 n-1 扫描数组到 0,并在每次迭代时从子数组 a[n] 中选择最大元素-1,...,i]。该子数组应该始终被排序(并且应该由数组的 n-i 个最大元素组成)——这类似于经典选择排序的循环不变式——并且最大元素为插入当前位置的值应该来自另一个子数组,即 a[i,...,0]

此外,正如评论中提到的,不需要返回数组,因为算法可以修改它。

关于java - 修改后的选择排序,选择最大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377021/

相关文章:

java - 将短语与全文进行比较

Java 正则表达式挑战 - 仅在需要时添加前缀

selection - 在 JavaFX 中绘制变换独立布局边界

mysql - 我如何限制MySQL中的选择?

android - 突出显示图像上的文字,类似于谷歌翻译应用程序

java - 如何从 Android 的内部存储中获取图像数组

java.util.Random 使计算速度提高 100 倍?

java - 如何在 Java 中显示具有整数值的 Set 中的元素

php - 如何从 laravel 中插入的图像数组中获取单个图像?

java - 尝试将整数数组转换为列表