【问题标题】:Selection sort not printing correct result选择排序不打印正确的结果
【发布时间】:2021-10-29 17:12:00
【问题描述】:

我正在尝试使用列表在 python 中实现选择排序。但是实现部分是正确的,并且按照我的算法,但它没有产生正确的输出。添加我的代码:

my_list = [64, 25, 12, 11, 32]

def selection_sort(element_list):
    for element in range(len(element_list)):
        mindex = element
        for compare_index in range(element+1, len(element_list)):
            if element_list[mindex] > element_list[compare_index]:
                mindex = compare_index
        element_list[compare_index], element_list[mindex] = element_list[mindex], element_list[compare_index]

    for element in range(len(element_list)):
        print(element_list[element])

selection_sort(my_list)

想要的输出:

11
12
25
32
64

我可以知道我在哪里犯错了吗?

【问题讨论】:

  • 想要的输出是什么?
  • 输出不正确怎么知道实现是正确的?
  • @LearningMathematics,要我详细补充一下算法吗?
  • @U12-Forward 添加。

标签: python data-structures selection-sort


【解决方案1】:
my_list = [64, 25, 12, 11, 32]

def selection_sort(element_list):
    for element in range(len(element_list)):
        mindex = element
        for compare_index in range(element+1, len(element_list)):
            if element_list[mindex] > element_list[compare_index]:
                mindex = compare_index
        element_list[element], element_list[mindex] = element_list[mindex], element_list[element]

    for element in range(len(element_list)):
        print(element_list[element])

selection_sort(my_list)

我建议使用 i 和 j 而不是 element 和 compare_index。

看看第 9 行。为什么它会修复它?

【讨论】:

    【解决方案2】:

    您的算法几乎是正确的,但是 element_list[compare_index], element_list[mindex] = element_list[mindex], element_list[compare_index] 在这一行中你犯了错误。 它不应该是compare_index,应该是element。请检查下面的正确算法

    my_list = [64, 25, 12, 11, 32]
    
    def selection_sort(element_list):
        for element in range(len(element_list)):
            mindex = element
            for compare_index in range(element+1, len(element_list)):
                if element_list[mindex] > element_list[compare_index]:
                    mindex = compare_index
            element_list[element], element_list[mindex] = element_list[mindex], element_list[element]
    
        for element in range(len(element_list)):
            print(element_list[element])
    
    selection_sort(my_list)
    
    

    【讨论】:

      【解决方案3】:
          my_list = [64, 25, 12, 11, 32]
          
          def selection_sort(element_list):
              for element in range(len(element_list)):
                  mindex = element
                  for compare_index in range(element+1, len(element_list)):
                      if element_list[mindex] > element_list[compare_index]:
                          mindex = compare_index
                  element_list[element], element_list[mindex] = element_list[mindex],element_list[element]
      
              for element in range(len(element_list)):
                  print(element_list[element])
      
      
          selection_sort(my_list)
      

      element_list[element] 和 element_list[mindex] 之间必须进行交换。

      【讨论】:

        【解决方案4】:

        我认为问题出在这条线上

        element_list[compare_index], element_list[mindex] = element_list[mindex], element_list[compare_index]

        这里我相信你想交换数组中较大和较小数字的位置,但问题是你正在交换具有索引compare_index和mindex的元素的位置。在上一行中,您正在执行mindex = compare_index,因此基本上您正在与自身交换一个元素。

        相反,您必须交换具有索引element 和mindex 的元素,因为compare_index 仅用于临时使用。

        在该行中进行此更改:

        element_list[element], element_list[mindex] = element_list[mindex], element_list[element]

        希望这能解决你的问题!

        【讨论】:

          猜你喜欢
          • 2014-10-06
          • 1970-01-01
          • 1970-01-01
          • 2021-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-16
          相关资源
          最近更新 更多