2014-10-05 47 views
-1

我試圖編寫此函數gensort(list),該函數使用數字列表並返回具有相同數字的新列表,但按從低到高的順序排列。輸出的一個例子是像如何將列表項從低到高排序而不使用內置工具

>>> gensort([111, 1, 3.14]) 
[1, 3.14, 111] 

我寫了一個函數取一個元素,它在上升奧得回到原來的位置:

def insert_sorted(elem,list): 
     if list == []: 
      return [elem] 
     elif elem < list[0]: 
      return [elem] + list 
     else: 
      return [list[0]] + insert_sorted(elem, list[1:]) 

現在我想將它應用到我的清單的其餘部分和我想出了這個:

def gensort(list): 
    insert = insert_sorted(list[min],list) 
    return insert 

但是,這並不起作用。我想知道如何遞歸地使用insert_sorted,或者寫一個不同的列表理解來讓它返回我整個列表的正確順序。

我知道有內置的排序工具,但我試圖用我現在有的東西寫這個。

+0

請修復您的縮進。 – 2014-10-05 16:27:19

+0

有很多排序算法 - 你看起來像你試圖寫一個插入排序 - 從前面排序。你也可以做一個冒泡排序 - 從後面進行有效排序 - 或者快速排序。關於不同排序類型的算法,大量的信息在線。此外,我會嘗試在更簡單的功能上進行遞歸,然後再執行此類操作 - 因爲您可能會發現調試非常困難。 – 2014-10-05 16:30:32

+0

insert_sorted中使用的遞歸看起來很好,並且從頭開始編寫排序函數的願望值得稱讚。我不明白爲什麼這項工作受到批評。 – 2014-10-05 16:37:14

回答

0

你沒有問創建自己的排序功能是否是一個好主意,所以我會回答你問的問題,與使用insert_sorted一種方式創建完整的gensort功能:

def gensort(list): 
    sorted_list = [] 
    for item in list: 
     sorted_list = insert_sorted(item, sorted_list) 
    return sorted_list 
0

爲什麼不使用排序? 如果你只把有數字,簡單的做這樣的事情:

insert_sorted(elem,list): 
    list.append(elem) 
    list.sort() // will sort in asc order 

這不是一個工具,它是在Python標準功能。你的方法有很大的缺點,它會很慢,並且需要長列表的內存。更好的辦法是添加新的元素來列出並運行排序功能。

隨着函數向n元素數組中添加一個元素,您將有n + 1個函數調用,創建n + 1個子數組。這種方式減慢,而不是可以接受的。如果您不想使用python排序,請改用一個循環排序算法。在蟒蛇冒泡排序的

例子:

def bubble_sort(list_): 
    """Implement bubblesort algorithm: iterate L to R in list, switching values 
    if Left > Right. Break when no alterations made to to list. """ 
    not_complete = True 
    while not_complete: 
     not_complete = False 
     for val, item in enumerate(list_): 
      if val == len(list_)-1: val = 0 
      else: 
       if list_[val] > list_[val+1]: 
        list_[val], list_[val+1] = list_[val+1], list_[val] 
        not_complete = True 
    return list_ 
+0

我建議-don; t重新發明輪子:)除非是你的任務:) – Beri 2014-10-05 16:32:38

+1

「排序」函數如何工作「可能很好的練習。 – usr2564301 2014-10-05 16:33:29

+0

好的,你必須在這裏使用遞歸算法嗎?你不能簡單地把它提取到另一種方法嗎?將幫助你更好地測試它。 – Beri 2014-10-05 16:34:30