为什么我的排序算法在 for 循环的第三次迭代后失败?

/* 这是提示:


以一个未排序的数组 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 次迭代看起来像它的工作,但之后它对排序的内容进行了排序。


我的逻辑有什么问题?


BIG阳
浏览 193回答 1
1回答

慕斯王

for&nbsp;(int&nbsp;j&nbsp;=&nbsp;1;&nbsp;j&nbsp;<&nbsp;A.length;&nbsp;j++)是错的。您应该只检查 i 之后的元素,因为 i 之前的元素按之前的迭代排序。所以应该是for(int&nbsp;j&nbsp;=&nbsp;i+1;&nbsp;j&nbsp;<&nbsp;A.length;&nbsp;j++)同样在第一个循环中,您不需要对最后一个元素做任何事情。您可以将停止条件更改为i<A.length-1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java