【问题标题】:Selection sort only passing once选择排序只通过一次
【发布时间】:2015-03-17 20:24:36
【问题描述】:

您好我正在尝试创建选择排序,但它似乎只通过一次 第一个调试显示这个 3,2,10,9,5,哪个是正确的 然后第二个调试显示这个 2,0,0,0,0 最后一个显示这个 3,0,10,9,5,

如您所见,它似乎只通过循环一次,而不是我告诉它我做错了什么的 4 次?

int[] List = new int[] {3, 2, 10, 9, 5};//List 
    int[] ListB = new int[] {0, 0, 0, 0, 0};//ListB

    Debug.Log(List[0] + ","+List[1] + ","+List[2] + ","+List[3] + ","+List[4] + ",");
    int minimum,temp;//2 new ints

    for (int outer = 0; outer <  List.Length-1; outer++)//Loop for 0 to number of ints in list -1
    {
        minimum = outer;//set minimum to outer

        for (int inner = 0; inner <  List.Length; inner++)//loop for how many ints are in the list
        {
            if (List[inner] < List[minimum])// if list inner < list minimum 
            {
                minimum = inner;//set minimum to inner
            }                                          
        }
        ListB[outer] = List[minimum];//listb outer = list minimum
        List[minimum] = 0;//set the list minimum to a dummy value 
    }
    Debug.Log(ListB[0] + ","+ListB[1] + ","+ListB[2] + ","+ListB[3] + ","+ListB[4]);
    Debug.Log(List[0] + ","+List[1] + ","+List[2] + ","+List[3] + ","+List[4] + ",");

【问题讨论】:

  • 在其中添加了更多调试后,它确实会按照应有的方式执行 4 次原始循环
  • 好的,所以它循环了 4 次,第一次交换到第二个数组,但之后它就停止交换它们

标签: sorting selection


【解决方案1】:

当你将 list[minimum] 设置为 0 时,下一次循环执行时会发现 0 作为最小值 你还有一件事要注意,第一个循环应该在 list.length 结束 这是真正的代码

int[] List = new int[] { 3, 2, 10, 9, 5 };//List 
        int[] ListB = new int[] { 0, 0, 0, 0, 0 };//ListB

        Debug.log(List[0] + "," + List[1] + "," + List[2] + "," + List[3] + "," + List[4] + ",");
        int minimum, temp;//2 new ints

        for (int outer = 0; outer < List.Length ; outer++)//Loop for 0 to number of ints in list -1
        {
            minimum = outer;//set minimum to outer

            for (int inner = 0; inner < List.Length; inner++)//loop for how many ints are in the list
            {
                if (List[inner] < List[minimum])// if list inner < list minimum 
                {
                    minimum = inner;//set minimum to inner
                }
            }
            ListB[outer] = List[minimum];//listb outer = list minimum
            List[minimum] = int.MaxValue;//set the list minimum to a dummy value 
        }
        Debug.log(ListB[0] + "," + ListB[1] + "," + ListB[2] + "," + ListB[3] + "," + ListB[4]);
        Debug.log(List[0] + "," + List[1] + "," + List[2] + "," + List[3] + "," + List[4] + ",");

【讨论】:

  • 只需将 int.max 更改为您的编程语言中的等效项 @pvtctrlalt
  • 非常感谢 alloush 我不确定要在列表[最小] 部分中放入什么,因为我正在使用刚刚所说的虚拟值工作的伪代码,所以我把 0 感谢指出
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 2016-06-04
  • 2017-06-19
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
相关资源
最近更新 更多