为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2021-10-20 11:10:32
/* 这是提示:以一个未排序的数组 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]);    }} }这是输出排序数组52011338当我在调试器中运行它时,我可以看到第一个 for 循环的前 2 次迭代看起来像它的工作,但之后它对排序的内容进行了排序。我的逻辑有什么问题?
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

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

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

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

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


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信