首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择排序问题

选择排序问题
EN

Stack Overflow用户
提问于 2017-01-30 01:35:33
回答 2查看 92关注 0票数 0

我正在尝试用python创建一个简单的选择排序程序,而不使用任何内置的函数。我现在的问题是我的代码只对列表的第一位进行排序。怎么了?

这是我喜欢的类型

代码语言:javascript
复制
  def selectionsort(list1):
    for x in range(len(list1)):
      tiniest = minimum(list1)
      swap(tiniest,x,list1)
  return(list1)

下面是我使用的最小值和交换函数

代码语言:javascript
复制
    def swap(index1,index2,list1):
       TheList = list1 
       temp = TheList[index1]
       TheList[index1] = TheList[index2]
       TheList[index2] = temp
       return(TheList)
    def minimum(list1):
       small = list1[0] 
       for i in list1:
          if i < small:
          small = i
       return small

输出列表= 3,2,1,0的示例

输出= 0,2,1,3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-30 02:10:07

一些简化将使其更易读/更容易理解:

代码语言:javascript
复制
def swap(lst, i1, i2):
  lst[i1], lst[i2] = lst[i2], lst[i1]  # easy-swapping by multi assignment 

def minimum(lst, s):  # s: start index
  min_val, min_index = lst[s], s
  for i in range(s+1, len(lst)):
    if lst[i] < min_val:
      min_val, min_index = lst[i], i
  return min_index  # return index of minimum, not minimum itself

def selection_sort(lst):
  for i in range(len(lst)): 
    swap(lst, i, minimum(lst, i))  
    # find min index starting from current and swap with current
票数 1
EN

Stack Overflow用户

发布于 2017-01-30 01:39:12

看起来minimum返回的是list1中最小元素的值,但是您的swap需要的是索引。尝试让minimum返回索引,而不是最小元素的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41923890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档