Re: [問題] 新手return範例問題

看板Python作者 (彈小男孩的木吉他)時間8年前 (2017/09/12 22:02), 編輯推噓0(004)
留言4則, 2人參與, 最新討論串2/2 (看更多)
踏入不到一個月的新手,嘗試回答一下,有錯誤的話請多指教。 : def quicksort(arr): : if len(arr) <= 1: : return arr 若 len(arr) <= 1 ,則不需排序,直接 return arr。 : pivot = arr[len(arr) // 2] 取 arr[len(arr) // 2 ] 作為關鍵的比較值,但其實我覺得無所謂, 直接用 arr[0] 也可以,不確定是否在數量太大時會影響執行速度? : left = [x for x in arr if x < pivot] 只要比 pivot 小的,通通丟進 left : middle = [x for x in arr if x == pivot] 與 pivot 相等的值 : right = [x for x in arr if x > pivot] 比 pivot 大的,通通丟進 right : return quicksort(left) + middle + quicksort(right) : print(quicksort([3,6,8,10,1,2,1])) 所以在這個例子裡: 首先 len(arr) // 2 為 3 ,故 pivot = arr[3] = 10 會回傳 quicksort([3,6,8,1,2,1]) + [10] + quicksort([]) 然後如 stucode 大所說的,會持續遞迴呼叫 quicksort(),繼續排序。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.241.142 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1505224975.A.B03.html

09/12 23:44, , 1F
取中間的好處是可以讓左右兩個列表大小比較平均一點
09/12 23:44, 1F

09/12 23:45, , 2F
因為實際應用中資料通常不會完全無序而是 partly sorted
09/12 23:45, 2F

09/12 23:50, , 3F
講錯, 不是大小是排序需要用的步驟數
09/12 23:50, 3F

09/13 00:49, , 4F
原來如此!感謝!
09/13 00:49, 4F
文章代碼(AID): #1Pj-aFi3 (Python)
文章代碼(AID): #1Pj-aFi3 (Python)