python 列表的sorted方法與排序算法的差異


一個初學python的小白考慮算法和時間復雜的空間復雜度太遠了。

在家看書看到一個小問題說到了冒泡排序,本着急切想了解高大上算法的python小白就去研究了一下

冒泡排序算法:

lis = [9, 6, 8, 7, 5, 3, 1, 2]
for i in range(len(lis)):
 for j in range(len(lis)):
 if a[i] >= a[j]:
pass
else:
lis[i], lis[j] = lis[j], lis[i]
print(lis)

結果如下:
[1, 2, 3, 5, 6, 7, 8, 9]


然后就是python的sroted方法:
print(sroted(lis,reverse=False)

結果如下:
[1, 2, 3, 5, 6, 7, 8, 9]

發現沒有,兩個方法得到的結果完全一樣有木有?一個用了7行代碼,而另一個就只有一行代碼?我腦子瓦特啦?還用算法,還那么難學

第二天早上就迫不及待的找到導師問了一下:

導師給到的解答是這樣的,簡單理解來說就是,你就幾個數據,用啥方法都行,你要是有巨量的數據你再試試?

然后我還真的找了大量的數據試了一下,π的數據100萬位。

然后然后刺激的來了sorted運行時間為:

時間:0.014961004257202148

冒泡排序的運行時間為:

時間:45.61460757255554

what????算法比用sorted方法整整多了四十多秒?

又去網上找了一下sorted的底層實現算法,發現用了一種

歸並排序

def merge(left,right): merged = [] i,j = 0,0 left_len,right_len = len(left),len(right) while i<left_len and j<right_len: if left[i] <= right[j]: merged.append(left[i]) i += 1 else: merged.append(right[j]) j += 1 merged.extend(left[i:]) merged.extend(right[j:]) return merged def mergeSort(a): if len(a) <= 1: return a else: mid = len(a) // 2 left = mergeSort(a[:mid]) right = mergeSort(a[mid:]) merge(left,right) return merge(left,right) def main(): a = [59,12,77,64,72,69,46,89,31,9] a1 = mergeSort(a) print(a1) if __name__ == '__main__': main()

看着就比冒泡排序高級好嗎?
總的來說,冒泡排序是很基礎的排序方式,運算速度還是比較慢的,從上面看到兩個方法的時間可以看到算法與算法之間的巨大差異。

同志們加油學習吧,加油,好好學習,天天向上!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM