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

歡迎訪問 生活随笔!

生活随笔

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

python

排序算法的python实现

發布時間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法的python实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡排序

冒泡排序是比較簡單的排序方法,它的思路是重復的走過要排序的序列,一次比較兩個元素,如果順序錯誤,就交換元素的位置,直到沒有元素需要交換位置。

原 始618597
第一次168597
第二次168597
第三次165897
第四次165897
第五次165879

……

第N次156789

代碼實現:

1.lst = [6,1,8,5,9,7] 2.for i in range(len(lst)-1): 3. for j in range(len(lst)-1): 4. if lst[j] > lst[j+1]: 5. tmp = lst[j] 6. lst[j] = lst[j+1] 7. lst[j+1] = tmp 8.print lst

選擇排序

選擇排序是從等待排序的數組里選擇一個最小(或者最大)的元素,拿出來放入新的數組,直到取出全部元素。

原 始6185973
第一次1685973
第二次1385976
第三次1358976
第四次1356978
第五次1356798
第六次1356789

每一次排序后最小的數組放在已排序的序列的最后

實現代碼

1.lst = [6,1,8,5,9,7,3] 2.for i in range(len(lst)): 3. tmp = lst[i] 4. pos = i 5. for j in range(i+1,len(lst)): 6. if tmp > lst[j]: 7. tmp = lst[j] 8. pos = j 9. a_tmp = lst[i] 10. lst[i] = tmp 11. lst[pos] = a_tmp 12. 13.print lst

插入排序

插入排序是一種簡單直觀的排序算法,原理是通過構建有序序列,對于未排序的數據,在已排序的序列中從后想前掃描,找到相應位置后插入。插入排序通常采用in-place排序,即 只需要用到O(1) 的額外空間的排序。

算法描述:

  • 從第一個元素開始,記該元素已經排序,
  • 獲取下一個元素作為新元素,在已經排序的序列中,從后向前掃描
  • 如果該元素(已排序的序列中的元素)大于新元素,,則將該元素移到下一位置
  • 重復步驟3, 直到找到已排序的元素小雨或等于新元素的位置
  • 將心元素插入該位置
  • 重復步驟2 ~步驟5 ,直到排序完成
  • 在排序時,如果元素比較的操作代價比較大,可以采用二分查找,來減少操作。
    實現代碼:

    1.lst = [6,1,8,5,9,7,2,4,6,9,2,32,45,76,8,3,3,4] 2. 3.for i in range(len(lst)): 4. for j in range(i,0,-1): 5. if lst[j-1] >lst[j]: 6. tmp = lst[j-1] 7. lst[j-1] = lst[j] 8. lst[j] = tmp

    快速排序 quick sort

    又稱 劃分交換排序;排序n個元素,需要Ο(n log n)次比較 ,最壞情況時需要,Ο(n2)次比較,但這種狀況并不常見。

    設 有序列 lst = [3,0,1,8,7,2,5,4,9,6] , i= 0 j=9 k = lst[0]

    0123456789
    3018725496
    2018735496
    2013785496
    2013785496
  • 以3為基準,從右向左找比 3 小的值 ,j–

  • 找到第一個小于三的數字2, lst[i] lst[j]交換位置;

  • 從左向右找第一大于3的數字 8 ,交換 lst[i] lst[j]位置 i++

  • 繼續從右向左找比3小的數字,直到 i==j 此時第一趟 完成,3的當前位置為正確位置
  • 此時大序列可分為兩個小序列
    sub_lst_01 = [2,0,1]
    sub_lst_01 = [7,8,5,4,9,6]
    按照第一趟排序的規則 對兩個子序列進行排序,直到所有子序列長度為1。

  • 201
    102

    以2為基準,從右向左找比2小的值,找到數字1 比2小,交換兩者位置
    此時從左向右找比2大的數字,未找到,2的位置為排序后的正確位置

    10
    01

    以1為基準,從右向左找比1小的數字,找到0比1小,交換兩者位置
    從左向右找比1 大的數字,未找到,1的位置為排序后的正確位置

    0

    此時序列只剩0 ,長度為1 ,0 的位置為排序后的正確位置

    785496
    685497
    675498
    645798
    ......
    546.89
    54....
    456789
  • 以7為基準,從右向左找到比7小的數字6,交換兩者位置
  • 從左向右查找到比7大的數字8 交換兩者位置
  • 從右向左找到比7小的數字4,交換兩者位置
  • 從左向右查找到比7大的數字,未找到,則7的位置為排序后的正確位置
    產生兩個子序列 [6,4,5] [8,9]
  • 重復以上操作,直到所有的序列排序完成。

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

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

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