2014-10-19 43 views
0

我试图写一些代码,它将通过一个列表运行,未排序,找到最低的数字,而不是将其移动到结果。它会这样做,直到未排序变空。基本上,一个排序程序。如何编写一个排序并附加到新列表的函数?

我是否正确地将findMin函数放入了一个循环中的electionSort函数?

如何获取返回值并将其附加到新列表中?

unsorted = [4, -9, 10, 2, 3.7, -20, 0] 
result = [] 


def findMin(l): 
    l = unsorted 
    if len(l) == 0: 
     return None 
    min = l[0]  
    for i in range (len(l)): 
     if l[i] < min: 
      min = l[i] 
    return min 




def selectionSort(): 
    for a in range (len(unsorted)): 
     findMin(l) 
     result.append(min) 
    print(result)  

selectionSort()  
+0

这是行不通的。在你打电话给findMin之前,我没有任何价值。此外,您从不会从l或未排序中获取任何值。 – stark 2014-10-19 20:36:18

回答

0

只需将它传递给append功能,但你需要在列表作为参数传递给selectionSort功能太:

def selectionSort(l): 
    for a in range (len(l)): 
     result.append(findMin(l)) 
    print(result) 

,但仍然是你的功能有很多问题,你可以用它来配方为实现选择排序更Python的方式:

递归选择排序

def sel_sort_rec(seq, i): 
    if i==0: return  
    max_j = i 
    for j in range(i): 
     if seq[j] > seq[max_j]: max_j = j 
    seq[i], seq[max_j] = seq[max_j], seq[i] 
    sel_sort_rec(seq, i-1) 

选择排序

def sel_sort(seq): 
    for i in range(len(seq)-1,0,-1): 
     max_j = i 
     for j in range(i): 
      if seq[j] > seq[max_j]: max_j = j 
     seq[i], seq[max_j] = seq[max_j], seq[i] 
+0

现在输出, [-20,-20,-20,-20,-20,-20,-20] >>> – 2014-10-19 20:38:26

+0

是的!问题在于你的功能,我会更新答案! – Kasramvd 2014-10-19 20:39:07

+0

我编辑答案,但仍然是您的选择功能有问题!你需要在函数中定义本地结果列表! – Kasramvd 2014-10-19 20:47:48

0

如果您正在寻找分钟每次,并把它在一个新的列表,你需要找到另一种最低限度之前删除原始列表分钟。删除列表中的功能按值删除。

def selectionSort(): 
    for a in range (len(unsorted)): 
     min = findMin(unsorted) 
     result.append(min) 
     unsorted.remove(min) 
    print(result)  

输出:

[-20, -9, 0, 2, 3.7, 4, 10] 
相关问题