java - 非常简单的排序算法不起作用

标签 java sorting

public static int[] sortArr(int[] a){
    int temp;
    for(int i = 0; i < a.length; i++){
        temp = a[i];
        a[i] = a[findMin(a, i)];
        a[findMin(a, i)] = temp;
    }
    return a;
}
public static int findMin(int[] a, int start){
    int min = a[start];
    int minIndex= start;
    for(int i = start; i < a.length; i++){
        if(a[i] < min){
            min = a[i];
            minIndex = i;
        }
    }
    return minIndex;
}

sortArr 方法只返回给定的数组,我不明白为什么。我已经在纸上算出来了,应该可以用。有人能看出问题所在吗?

最佳答案

您调用了 findMin 两次,但与第一次调用位于同一行的代码导致第二次调用的结果发生更改。

你有:

a[i] = a[findMin(a, i)]; // findMin() returns the min, and you'll move that to a[i]
a[findMin(a, i)] = temp; // findMin() returns the new min == i

改为使用:

int min = findMin(a, i);
a[i] = a[min];
a[min] = temp;

关于java - 非常简单的排序算法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36141938/

相关文章:

Java JFrame 对话框问题

java - 我不能在我的数组中使用全名

java - Jersey 条件路径

JavaScript 按可为空的 bool 值对数组进行排序,然后按字符串排序

java - 哪个 Java 数据库 API 最容易使用?

java - 如何修复 "no view found for id"?

performance - “Ω(n log n) barrier”用于排序算法的规则是什么?

java - 插入排序: count swaps and comparisons

linux - 使用最后一个字段对文本文件进行排序

用于排序的 JavaScript 比较器函数未被调用