常用的演算法

2022-04-03 01:46:58 字數 1661 閱讀 4493

1氣泡排序,複雜度o(n2

)最慢,效率最低

臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,

這樣一趟過去後,最大或最小的數字被交換到了最後一位,

然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束,以此類推比較第i次。。。

list=[6,3,4,8,1,10]

for i in

range(len(list)):

for j in range(1,len(list)-i):

print i,j,list[j-1],list[j]

if list[j-1] >list[j]:

list[j-1],list[j]=list[j],list[j-1]

print

list

print list

2選擇排序,複雜度o(n2

)

每次遍歷選擇乙個最值,和冒泡的區別在於交換的是位置,也就是腳標

3插入排序複雜度o(n2)

插入排序通過把序列中的值插入乙個已經排序好的序列中,直到該序列的結束。插入排序是對氣泡排序的改進。它比氣泡排序快2倍。一般不用在資料大於1000的場合下使用插入排序,或者重複排序超過200資料項的序列。

4快速排序,複雜度o(nlogn)

對氣泡排序的改進,選出乙個值,其他的數和這個值比較,比這個值小的都放在左邊,比這個值大的都放在右邊

(1) 如果不多於1個資料,直接返回。

(2) 一般選擇序列最左邊的值作為支點資料。

(3) 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。

(4) 對兩邊利用遞迴排序數列(算是很快的排序演算法了,因為遞迴,所以耗記憶體)

def

quicksort(l, low, high):

i =low

j =high

if i >=j:

return

l key =l[i]

while i while i < j and l[j] >=key:

j = j-1l[i] =l[j]

while i < j and l[i] <=key:

i = i+1l[j] =l[i]

l[i] =key

quicksort(l, low, i-1)

quicksort(l, j+1, high)

return

ll=[12, 6, 9, 7, 5, 11, 4, 8, 3, 10]

print quicksort(l, 0, 9)

#i=0,j=len(l)-1

5堆排序複雜度o(nlogn)

堆排序適合於資料量非常大的場合(百萬資料)。

堆排序不需要大量的遞迴或者多維的暫存陣列。這對於資料量非常巨大的序列是合適的。比如超過數百萬條記錄,因為快速排序,歸併排序都使用遞迴來設計演算法,在資料量非常大的時候,可能會發生堆疊溢位錯誤。

堆排序會將所有的資料建成乙個堆,最大的資料在堆頂,然後將堆頂資料和序列的最後乙個資料交換。接下來再次重建堆,交換資料,依次下去,就可以排序所有的資料。

常用的演算法

排序演算法 氣泡排序 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。直接插入排序 要排序的一組數中,假設前面 n 1 n 2 個數已經是排 好順序的...

常用的排序演算法

排序方式 插入排序 直接插入排序 shell排序 選擇排序 直接選擇排序 堆排序交換排序 氣泡排序 快速排序 歸併排序 分配和索引排序 基數排序 桶式排序 include using namespace std 直接插入排序 arr為待排陣列,n為陣列長度 void insertsort int a...

常用的查詢演算法

1 mid low high 2 2 當k arr mid 時,low mid 1,並重複1 當k 當k arr mid 時,找到,結束。直到low high,還沒找到那麼說明該關鍵字不存在。核心 實現 演算法步驟 1 第一步確定查詢節點在那個表中的那一塊。2 第二步在確定的塊中找到該節點。1 雜湊...