日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

排序算法-01冒泡排序(Python实现)

發布時間:2024/4/11 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法-01冒泡排序(Python实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

如果說各種各樣的編程語言是五花八門的招式,那么數據結構和算法就是程序員的內功了,這也是為什么各種招聘面試永遠不會冷落這些的原因。而排序作為數據結構一個重要組成。所謂排序,就是將一組無序的數據整理成為有序的序列的過程。

排序分類

一般而言,排序分為內部排序和外部排序。

  • 若整個排序過程不需要訪問外存便能夠完成,這類排序稱為內部排序。
  • 若數據量很大,排序不可能在內存中完成,這類排序稱為外部排序。

冒泡排序

冒泡排序是一種交換排序,交換排序的基本思想是:兩兩比較待排序的關鍵字,并交換不滿足次序要求的那對數,直到整個序列都滿足次序要求為止。

什么是冒泡排序

  • 以升序為例,對n個數據,共進行n輪排序,每一輪兩兩比較相鄰元素,將小的放到前面大的放到后面,每一輪結果是將當前最大的元素移動到序列最后。
  • 由于每一輪排序當前最大的元素到達序列的最底部,越小的元素慢慢浮動到序列的頂部,故名冒泡排序。

代碼實現

這個排序實現并不是很難,用Python實現如下。

def bubble_sort(data):for i in range(len(data)-1):print("第{}趟排序".format(i))for j in range(len(data)-1-i):if data[j] > data[j+1]:data[j], data[j+1] = data[j+1], data[j]print("當前排序結果為:", data)return Nonetest_data = [1, 3, 5, 7, 9, 8, 6, 4, 2] print("原來數據", test_data) bubble_sort(test_data)

它有如下的執行結果。

原來數據 [1, 3, 5, 7, 9, 8, 6, 4, 2] 第0趟排序 當前排序結果為: [1, 3, 5, 7, 8, 6, 4, 2, 9] 第1趟排序 當前排序結果為: [1, 3, 5, 7, 6, 4, 2, 8, 9] 第2趟排序 當前排序結果為: [1, 3, 5, 6, 4, 2, 7, 8, 9] 第3趟排序 當前排序結果為: [1, 3, 5, 4, 2, 6, 7, 8, 9] 第4趟排序 當前排序結果為: [1, 3, 4, 2, 5, 6, 7, 8, 9] 第5趟排序 當前排序結果為: [1, 3, 2, 4, 5, 6, 7, 8, 9] 第6趟排序 當前排序結果為: [1, 2, 3, 4, 5, 6, 7, 8, 9] 第7趟排序 當前排序結果為: [1, 2, 3, 4, 5, 6, 7, 8, 9]

顯然,分析冒泡排序的算法復雜度如下。

排序名稱最好情況最壞情況平均情況
冒泡排序O(n)O(n^2)O(n^2)

也就是說,這個算法是可以優化的,一旦序列基本有序,只需要進行少數輪次排序就可以實現,后面的輪次是多余的,這也是很多面試官喜歡問到的。

優化后的代碼如下所示,只有添加一個flag監控該趟是否交換,一旦某一趟排序沒有交換,就認為排序可以結束了。

任何時候,在空間復雜度沒有太大優化空間時,優化時間復雜度是一個永恒不變的話題。

def bubble_sort_optimized(data):for i in range(len(data)-1):flag = Falseprint("第{}趟排序".format(i))for j in range(len(data)-i-1):if data[j] > data[j+1]:data[j], data[j+1] = data[j+1], data[j]flag = Trueif flag is False:breakprint("當前排序結果為:", data)return None test_data = [1, 2, 3, 4, 5, 6, 7, 9, 8] print("原來數據", test_data) bubble_sort_optimized(test_data)

它有如下的執行結果。

原來數據 [1, 2, 3, 4, 5, 6, 7, 9, 8] 第0趟排序 當前排序結果為: [1, 2, 3, 4, 5, 6, 7, 8, 9] 第1趟排序

更加詳細可以查看我的Github倉庫,歡迎star或者fork。

總結

以上是生活随笔為你收集整理的排序算法-01冒泡排序(Python实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。