2015-11-03 34 views
0

我想创建一个自定义排序方法,在该方法中,我将一个不以数字顺序排列的列表,并将列表按从低到高的顺序排列。Python:在列表排序之前创建客户排序方法和循环停止排序

程序应该采取以下列表...

arr = [1, 2, 3, 1, 4] 

*和打印它如下... *

arr = [1, 1, 2, 3, 4] 

因为它我的代码读取...

def sort(list): 
for i in range(1, len(list)): 
    if list[i] < list[i - 1]: 
     temp = list[i - 1] 
     list[i - 1] = list[i] 
     list[i] = temp 
     print arr  
sort(arr) 

我的输出是这样的...

[1, 2, 1, 3, 4] 

它好像功能通过列表运行一次,一旦重新排序号码,并停止他们都在之前数字顺序。我如何让它遍布列表中所有次数,以便将所有数字放在应该在的位置?

+0

为什么不直接使用现有的list.sort()方法?这可能是功课吗? –

+2

1.不要影响'list'。 2.只需使用'sorted'。 3. *“我如何通过列表遍历所有数字,尽可能多地将它们放在应该出现的位置?” - “'while',也许? – jonrsharpe

+0

@BasJansen我正在研究我的求职面试算法。 ;) –

回答

3

为什么你不只是:

def sort_list(my_list): 
    print sorted(my_list) 


def main(): 
    arr = [1, 3, 2, 5, 4] 
    sort_list(arr) 

if __name__ == "__main__": 
    main() 

这将有以下的输出:

[1, 2, 3, 4, 5] 

如果你不希望使用内置的功能,只是这样做:

def sort_list(new_list): 
    data_list = [1, 3, 2, 5, 4] 

    while data_list: 
     minimum = data_list[0] # arbitrary number in list 
     for x in data_list: 
      if x < minimum: 
       minimum = x 
     new_list.append(minimum) 
     data_list.remove(minimum) 

    print new_list 


def main(): 
    new_list = [] 
    sort_list(new_list) 

if __name__ == "__main__": 
    main() 

这将具有相同的输出:

[1, 2, 3, 4, 5]