日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python 常見的排序算法實現(xiàn)匯總

瀏覽:20日期:2022-07-13 13:24:12

python 常見的排序算法實現(xiàn)匯總

排序分為兩類,比較類排序和非比較類排序,比較類排序通過比較來決定元素間的相對次序,其時間復(fù)雜度不能突破O(nlogn);非比較類排序可以突破基于比較排序的時間下界,缺點就是一般只能用于整型相關(guān)的數(shù)據(jù)類型,需要輔助的額外空間。

要求能夠手寫時間復(fù)雜度位O(nlogn)的排序算法:快速排序、歸并排序、堆排序

1.冒泡排序

思想:相鄰的兩個數(shù)字進行比較,大的向下沉,最后一個元素是最大的。列表右邊先有序。

時間復(fù)雜度$O(n^2)$,原地排序,穩(wěn)定的

def bubble_sort(li:list): for i in range(len(li)-1): for j in range(i + 1, len(li)): if li[i] > li[j]:li[i], li[j] = li[j], li[i]

2.選擇排序

思想:首先找到最小元素,放到排序序列的起始位置,然后再從剩余元素中繼續(xù)尋找最小元素,放到已排序序列的末尾,以此類推,直到所有元素均排序完畢。列表左邊先有序。

時間復(fù)雜度$O(n^2)$,原地排序,不穩(wěn)定

def select_sort(nums: list): for i in range(len(nums) - 1): min_index = i for j in range(i + 1, len(nums)): if nums[j] < nums[i]:min_index = j nums[i], nums[min_index] = nums[min_index], nums[i]

3.插入排序

思想:構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。列表左邊先有序。

時間復(fù)雜度$O(n^2)$,原地排序,穩(wěn)定

def insert_sort(nums: list): for i in range(len(nums)): current = nums[i] pre_index = i - 1 while pre_index >= 0 and nums[pre_index] > current: nums[pre_index + 1] = nums[pre_index] pre_index -= 1 nums[pre_index + 1] = current

4.希爾排序

思想:插入排序的改進版,又稱縮小增量排序,將待排序的列表按下標的一定增量分組,每組分別進行直接插入排序,增量逐漸減小,直到為1,排序完成

時間復(fù)雜度$O(n^{1.5})$,原地排序,不穩(wěn)定

def shell_sort(nums: list): gap = len(nums) >> 1 while gap > 0: for i in range(gap, len(nums)): current = nums[i] pre_index = i - gap while pre_index >= 0 and nums[pre_index] > current:nums[pre_index + gap] = nums[pre_index]pre_index -= gap nums[pre_index + gap] = current gap >>= 1

5.快速排序

思想:遞歸,列表中取出第一個元素,作為標準,把比第一個元素小的都放在左側(cè),把比第一個元素大的都放在右側(cè),遞歸完成時就是排序結(jié)束的時候

時間復(fù)雜度$O(nlogn)$,空間復(fù)雜度$O(logn)$,不穩(wěn)定

def quick_sort(li:list): if li == []: return [] first = li[0] # 推導(dǎo)式實現(xiàn) left = quick_sort([l for l in li[1:] if l < first]) right = quick_sort([r for r in li[1:] if r >= first]) return left + [first] + right

6.歸并排序

思想:分治算法,拆分成子序列,使用歸并排序,將排序好的子序列合并成一個最終的排序序列。關(guān)鍵在于怎么合并:設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置,比較兩個指針所指向的元素,選擇相對小的元素放到合并空間,并將該指針移到下一位置,直到某一指針超出序列尾,將另一序列所剩下的所有元素直接復(fù)制到合并序列尾。

時間復(fù)雜度$O(nlogn)$,空間復(fù)雜度O(n),不穩(wěn)定

二路歸并

def merge_sort(nums: list): if len(nums) <= 1: return nums mid = len(nums) >> 1 left = merge_sort(nums[:mid]) # 拆分子問題 right = merge_sort(nums[mid:]) def merge(left, right): # 如何歸并 res = [] l, r = 0, 0 while l < len(left) and r < len(right): if left[l] <= right[r]:res.append(left[l])l += 1 else:res.append(right[r])r += 1 res += left[l:] res += right[r:] return res return merge(left, right)

7.堆排序

思想:根節(jié)點最大,大頂堆,對應(yīng)升序,根節(jié)點最小,小頂堆。

構(gòu)建大根堆,完全二叉樹結(jié)構(gòu),初始無序 最大堆調(diào)整,進行堆排序。將堆頂元素與最后一個元素交換,此時后面有序

時間復(fù)雜度$O(nlogn)$,原地排序,穩(wěn)定

def heap_sort(nums: list): def heapify(parent_index, length, nums): temp = nums[parent_index] # 根節(jié)點的值 chile_index = 2 * parent_index + 1 # 左節(jié)點,再加一為右節(jié)點 while chile_index < length: if chile_index + 1 < length and nums[chile_index + 1] > nums[chile_index]:chile_index = chile_index + 1 if temp > nums[chile_index]:break nums[parent_index] = nums[chile_index] # 使得根節(jié)點最大 parent_index = chile_index chile_index = 2 * parent_index + 1 nums[parent_index] = temp for i in range((len(nums) - 2) >> 1, -1, -1): heapify(i, len(nums), nums) # 1.建立大根堆 for j in range(len(nums) - 1, 0, -1): nums[j], nums[0] = nums[0], nums[j] heapify(0, j, nums) # 2.堆排序,為升序 if __name__ == ’__main__’: nums = [89, 3, 3, 2, 5, 45, 33, 67] # [2, 3, 3, 5, 33, 45, 67, 89] heap_sort(nums) print(nums)

以上就是python 常見的排序算法實現(xiàn)匯總的詳細內(nèi)容,更多關(guān)于python 排序算法的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
老司机免费视频一区二区三区| av最新在线| 亚洲网站视频| 久久国产主播| 亚洲国产专区| 亚洲一区欧美二区| 伊人www22综合色| 亚洲人成网站在线在线观看| 亚洲三级毛片| 国产伦精品一区二区三区千人斩 | 波多野结衣久久精品| 日韩在线免费| 肉色欧美久久久久久久免费看| 日韩网站中文字幕| 女同性一区二区三区人了人一| 亚洲一区二区三区免费在线观看| 免费看黄色91| 国产精品一区二区三区美女| 精品国产网站| 久久精品123| 亚洲九九精品| 麻豆精品久久久| 亚洲成人国产| 亚洲精品欧美| 美女毛片一区二区三区四区最新中文字幕亚洲 | 久久国产小视频| 在线一区欧美| 青草国产精品久久久久久| 国产精品4hu.www| 色综合五月天| 亚洲欧美日韩国产一区二区| 欧美一区不卡| 午夜精品久久久久久久久久蜜桃| 中国女人久久久| 国产剧情在线观看一区| 日韩在线综合| 五月亚洲婷婷 | 丁香婷婷久久| 亚洲电影在线一区二区三区| 亚洲bt欧美bt精品777| 精品网站aaa| 日韩视频二区| 欧美成人精品一级| 狠狠久久婷婷| 国产人成精品一区二区三| 亚洲啊v在线| 中文字幕av一区二区三区四区| 精品一区二区三区在线观看视频| 一区二区视频欧美| 久久激情综合网| 欧美精选视频一区二区| 日韩精品a在线观看91| 亚洲精品永久免费视频| 综合国产在线| 日本欧美不卡| 欧美精品国产一区| 欧美+亚洲+精品+三区| 欧美一区激情| 欧美.日韩.国产.一区.二区| 国产精品毛片久久久| 亚洲精品123区| 久久精品国产999大香线蕉| 爽爽淫人综合网网站| 91一区二区三区四区| 亚洲另类av| 久久久国产亚洲精品| 国产欧美一区二区三区国产幕精品| 久久精选视频| 免费在线日韩av| 玖玖精品视频| 日韩免费视频| 国产精品红桃| 少妇精品在线| 99亚洲精品| 欧洲一区二区三区精品| 国产精品最新| 蜜桃久久av| 丝袜av一区| 精品资源在线| 亚洲精品自拍| 99视频一区| 久久精品亚洲人成影院| 丰满少妇一区| 国产激情欧美| 日韩激情一区二区| 久久亚洲二区| 午夜久久黄色| 精品成人免费一区二区在线播放| 国产精品免费99久久久| 亚洲欧美在线综合| 妖精视频成人观看www| 免费看av不卡| 国产成人1区| 欧美成人精品午夜一区二区| 日韩精品五月天| 日韩一区精品视频| 伊人影院久久| 免费观看久久av| 99精品电影| 欧美黄色网页| 国产精品原创| 高清av一区| 久久久国产精品网站| 欧美亚洲专区| 日韩国产精品久久久久久亚洲| 石原莉奈在线亚洲三区| 午夜久久福利| 免费精品国产的网站免费观看| 999久久久国产精品| 美女福利一区二区三区| 欧美aa在线视频| 欧美偷窥清纯综合图区| 日本va欧美va精品| 日本午夜精品一区二区三区电影| 亚洲资源网站| 日韩在线黄色| 日韩高清一区在线| 日本在线不卡视频| 日韩精品久久理论片| 亚洲区国产区| 亚洲免费资源| 亚洲精品第一| 欧美天堂在线| 麻豆久久久久久| 欧美1区二区| 久久婷婷国产| 成人国产精品久久| 91亚洲人成网污www| 国产在线观看www| av高清一区| 午夜日本精品| 免费观看在线综合色| 视频精品一区| 久久精品av麻豆的观看方式| 久久超碰99| а√天堂8资源中文在线| 成人免费电影网址| 国产精品美女久久久浪潮软件| 中文字幕av亚洲精品一部二部| 亚洲精品福利| 国产精品巨作av| 亚洲伊人av| 在线一区电影| 婷婷综合成人| 国产一区三区在线播放| 成人久久一区| 蜜桃视频一区二区三区| 国产午夜一区| 国产精品久久久久蜜臀| 婷婷综合五月| 欧美在线首页| sm久久捆绑调教精品一区| 欧美日中文字幕| 亚洲精品乱码| 美女视频一区在线观看| 久久九九精品| 日本一区福利在线| 精品72久久久久中文字幕| 欧美.日韩.国产.一区.二区| 亚洲人成毛片在线播放女女| 欧美激情三区| 免费av一区二区三区四区| 涩涩涩久久久成人精品| 精品国产99| 亚洲美洲欧洲综合国产一区| 奇米亚洲欧美| 成人精品中文字幕| 日韩一二三区在线观看| 精品一区91| 蜜桃成人av| 欧美一区自拍| 1024精品一区二区三区| 日韩美女国产精品| av资源中文在线天堂| 久久国产精品99国产| 精品欧美视频| 丝袜美腿高跟呻吟高潮一区| 欧美成人一二区| 最新日韩av| 久久只有精品| 久久亚洲精品伦理| 国产一区二区三区日韩精品| 99国产一区| 美女性感视频久久| 最新亚洲激情| 精品一区二区三区亚洲| 国产手机视频一区二区| 精品久久网站| 日韩影院免费视频| 国产一区二区三区四区| 男人的天堂久久精品| 成人亚洲一区二区| 综合视频一区| 91精品蜜臀一区二区三区在线| 国产亚洲精品美女久久| 欧美a级片一区| 久久精品亚洲| 色综合视频一区二区三区日韩 | 国产探花在线精品一区二区| 婷婷色综合网|