国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現八大排序算法(2)

2020-02-16 10:15:08
字體:
來源:轉載
供稿:網友

本文接上一篇博客python實現的八大排序算法part1,將繼續使用python實現八大排序算法中的剩余四個:快速排序、堆排序、歸并排序、基數排序

5、快速排序

快速排序是通常被認為在同數量級(O(nlog2n))的排序方法中平均性能最好的。

算法思想:

已知一組無序數據a[1]、a[2]、……a[n],需將其按升序排列。首先任取數據a[x]作為基準。比較a[x]與其它數據并排序,使a[x]排在數據的第k位,并且使a[1]~a[k-1]中的每一個數據<a[x],a[k+1]~a[n]中的每一個數據>a[x],然后采用分治的策略分別對a[1]~a[k-1]和a[k+1]~a[n]兩組數據進行快速排序。
優點:極快,數據移動少;
缺點:不穩定。

python代碼實現:

def quick_sort(list):  little = []  pivotList = []  large = []  # 遞歸出口  if len(list) <= 1:    return list  else:    # 將第一個值做為基準    pivot = list[0]    for i in list:      # 將比基準小的值放到less數列      if i < pivot:        little.append(i)      # 將比基準大的值放到more數列      elif i > pivot:        large.append(i)      # 將和基準相同的值保存在基準數列      else:        pivotList.append(i)    # 對less數列和more數列繼續進行快速排序    little = quick_sort(little)    large = quick_sort(large)    return little + pivotList + large

下面這段代碼出自《Python cookbook 第二版的三行實現python快速排序。

#!/usr/bin/env python#coding:utf-8'''file:python-8sort.pydate:9/1/17 9:03 AMauthor:lockeyemail:lockey@123.comdesc:python實現八大排序算法'''lst = [65,568,9,23,4,34,65,8,6,9]def quick_sort(list):  if len(list) <= 1:    return list  else:    pivot = list[0]    return quick_sort([x for x in list[1:] if x < pivot]) + /        [pivot] + /        quick_sort([x for x in list[1:] if x >= pivot])

運行測試結果截圖:

這里寫圖片描述

好吧,還有更精簡的語法糖,一行完事:

quick_sort = lambda xs : ( (len(xs) <= 1 and [xs]) or [ quick_sort( [x for x in xs[1:] if x < xs[0]] ) + [xs[0]] + quick_sort( [x for x in xs[1:] if x >= xs[0]] ) ] )[0]

若初始序列按關鍵碼有序或基本有序時,快排序反而蛻化為冒泡排序。為改進之,通常以“三者取中法”來選取基準記錄,即將排序區間的兩個端點與中點三個記錄關鍵碼居中的調整為支點記錄。快速排序是一個不穩定的排序方法。

在改進算法中,我們將只對長度大于k的子序列遞歸調用快速排序,讓原序列基本有序,然后再對整個基本有序序列用插入排序算法排序。實踐證明,改進后的算法時間復雜度有所降低,且當k取值為 8 左右時,改進算法的性能最佳。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通化县| 松阳县| 囊谦县| 六安市| 通渭县| 衡山县| 姜堰市| 田林县| 夏邑县| 诸暨市| 海盐县| 石台县| 永安市| 赣州市| 锡林浩特市| 芜湖市| 平利县| 且末县| 常熟市| 鄂伦春自治旗| 岗巴县| 英山县| 招远市| 太谷县| 黔南| 遂宁市| 杭锦后旗| 息烽县| 朔州市| 普兰店市| 遵义县| 江油市| 礼泉县| 鲜城| 东光县| 弥渡县| 开封县| 怀安县| 巴东县| 西乡县| 松江区|