常用排序演算法比較

2021-08-26 15:00:43 字數 2221 閱讀 2842

不穩定:

選擇排序(selection sort)— o(n2)

快速排序(quicksort)— o(nlogn) 平均時間, o(n2) 最壞情況; 對於大的、亂序串列一般認為是最快的已知排序

堆排序 (heapsort)— o(nlogn)

希爾排序 (shell sort)— o(nlogn)

基數排序(radix sort)— o(n·k); 需要 o(n) 額外儲存空間 (k為特徵個數)

穩定:

插入排序(insertion sort)— o(n2)

氣泡排序(bubble sort) — o(n2)

歸併排序 (merge sort)— o(n log n); 需要 o(n) 額外儲存空間

二叉樹排序(binary tree sort) — o(nlogn); 需要 o(n) 額外儲存空間

計數排序  (counting sort) — o(n+k); 需要 o(n+k) 額外儲存空間,k為序列中max-min+1

桶排序 (bucket sort)— o(n); 需要 o(k) 額外儲存空間

1. 氣泡排序

def bublle_sort(l):

if l==:

return l

length=len(l)

for i in range(length):

for j in range(0,length-i-1):

if l[j]>l[j+1]:

l[j],l[j+1]=l[j+1],l[j]

return l

2. 選擇排序

def select_sort(l):

if l==:

return l

length=len(l)

for i in range(length-1):

k=itemp=l[i]

for j in range(i+1,length):

if temp>l[j]:

temp=l[j]

k=jl[i],l[k]=l[k],l[i]

return l

3.插入排序

def insert_sort(l):

if l==:

return l

length=len(l)

for i in range(1,length):

temp=l[i]

k=iwhile k-1>=0 and temp4.歸併排序

def merge(l1,l2):

l=while l1!= and l2!=:

if l1[0]5.快速排序

def partion(l,i,j):

temp=l[i]

while i=temp: ####### 注意從右邊開始容易一些

j-=1

if i=j:

return l

mid=partion(l,i,j)

quick_sort(l,i,mid-1)

quick_sort(l,mid+1,j)

return l

6. 堆排序

def heap(l):

if l==:

return l

length=len(l)

start=length//2

while start>=0:

k=start

while 2*k+1<=length-1: ######### 先比較孩子節點比較好

temp=2*k+1

if 2*k+2<=length-1 and l[2*k+2]>l[2*k+1]:

temp=2*k+2

if l[k]l[k],l[temp]=l[temp],l[k]

k=temp

else:

break

start-=1

return l

def heap_sort(l):

out=

while l!=:

heap(l)

out.insert(0,l[0])

l[0]=l[-1]

l.pop(-1)

return out

常用演算法排序比較

先看圖 2.三種簡單排序演算法簡單,但是效率低下 高階排序在簡單排序基礎上優化,演算法複雜,換取的是效能提高,同時可能需要更多的輔助空間。3.快速排序和歸併排序都使用了分治和遞迴,所以面試時被問到的機會比較高,尤其是快速排序。4.從時間效能上看,快速排序是所有排序演算法中實際效能最好的,然而快速排序...

DS 常用排序演算法比較

1.穩定性比較 插入排序 氣泡排序 二叉樹排序 二路歸併排序及其他線形排序是穩定的 選擇排序 希爾排序 快速排序 堆排序是不穩定的 2.時間複雜性比較 插入排序 氣泡排序 選擇排序的時間複雜性為o n2 其它非線形排序的時間複雜性為o nlog2n 線形排序的時間複雜性為o n 3.輔助空間的比較 ...

常用排序演算法總結(2) 非比較排序演算法

主要有氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。在一定條件下,它們的時間複雜度可以達到o n 需要三個陣列 待排序陣列 int arr new int 輔助計數陣列 int help new int max min 1 該陣列大小為待排序陣列中的最大值減最小值 1 輸出陣列 int...