【问题标题】:Why does my sorting algorithm fails after the 3rd iteration of the for loop?为什么我的排序算法在 for 循环的第 3 次迭代后失败?
【发布时间】:2018-09-30 00:19:05
【问题描述】:

/* 这是提示:

以未排序的数组 a 开始

输出:排序后的数组 a。

在数组a[1:n]中找到最小的元素,称它为a[j]。 如果它小于 a[0],则将其与 a[0] 交换。 对索引 1、2、... 重复此过程,直到对 who 数组进行排序。 */

public class assing2 {

public static void main(String args[]) 
{ 
    //array of ints
    int[] A = new int[] {33, 20, 8, 11, 5};
    int min_id = 0;

    int temp_i = 0;
    //int temp_max = 0;


    for (int i = 0; i < A.length; i++) 
    {
        min_id = i;
        temp_i = A[i];

        for (int j = 1; j < A.length; j++)
        {
            if (A[min_id] > A[j])
            {
                min_id = j;

            }
        }


        A[i] = A[min_id];
        A[min_id] = temp_i;


    }

    System.out.println("Sorted array"); 
    for ( int i = 0; i < A.length; i++)
    {
        System.out.println(A[i]);
    }

} 

}

这是输出

排序数组

5

20

11

33

8

当我在调试器中运行它时,我可以看到第一个 for 循环的前 2 次迭代看起来像是在工作,但之后它对已排序的内容进行了排序。

我的逻辑有什么问题?

【问题讨论】:

标签: java arrays sorting


【解决方案1】:
for (int j = 1; j < A.length; j++) 

错了。您应该只检查 i 之后的元素,因为 i 之前的元素是按之前的迭代排序的。所以应该是

for(int j = i+1; j < A.length; j++) 

同样在第一个循环中,你不需要对最后一个元素做任何事情。您可以将停止条件更改为i&lt;A.length-1

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2019-08-29
    • 1970-01-01
    • 2019-05-12
    • 2017-10-13
    相关资源
    最近更新 更多