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

时间:2018-09-30 00:19:05

标签: java arrays sorting

/ * 这是提示:

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

我的逻辑怎么了?

1 个答案:

答案 0 :(得分:3)

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

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

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

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