常見六大排序演算法詳解以及比較

2021-09-19 05:10:00 字數 2405 閱讀 9650

氣泡排序(英語:bubble sort)是一種簡單的排序演算法。它重複地遍歷要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

氣泡排序演算法的運作如下:

交換過程圖示(第一次):

那麼我們需要進行n-1次冒泡過程,每次對應的比較次數如下圖所示:

# j表示每次遍歷需要比較的次數,是逐漸減小的

for i in range(j):

if alist[i] > alist[i+1]:

alist[i], alist[i+1] = alist[i+1], alist[i]

li = [54,26,93,17,77,31,44,55,20]

bubble_sort(li)

print(li)

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

選擇排序的主要優點與資料移動有關。如果某個元素位於正確的最終位置上,則它不會被移動。選擇排序每次交換一對元素,它們當中至少有乙個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。

排序過程:

# 需要進行n-1次選擇操作

for i in range(n-1):

# 記錄最小位置

min_index = i

# 從i+1位置到末尾選擇出最小資料

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

if alist[j] < alist[min_index]:

min_index = j

# 如果選擇出的資料不在正確位置,進行交換

if min_index != i:

alist[i], alist[min_index] = alist[min_index], alist[i]

alist = [54,226,93,17,77,31,44,55,20]

selection_sort(alist)

print(alist)

歸併排序是採用分治法的乙個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。

將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

def merge_sort(alist):

if len(alist) <= 1:

return alist

# 二分分解

num = len(alist)/2

left = merge_sort(alist[:num])

right = merge_sort(alist[num:])

# 合併

return merge(left,right)

def merge(left, right):

'''合併操作,將兩個有序陣列left和right合併成乙個大的有序陣列'''

#left與right的下標指標

l, r = 0, 0

result =

while l

if left[l] < right[r]:

l += 1

else:

r += 1

result += left[l:]

result += right[r:]

return result

alist = [54,26,93,17,77,31,44,55,20]

sorted_alist = mergesort(alist)

print(sorted_alist)

Golang實現常用六大排序演算法

使用golang實現了以下排序演算法 package main import fmt math rand sort time const num 10000 測試陣列的長度 rangenum 100000 陣列元素大小範圍 func main 生成隨機數組 func generaterand int...

六大排序粗解

public class paixu system.out.println 排序後 a bubble a a select a a insert a a shell a,a.length guibing a,0,a.length 1 fast a,0,a.length 1 for int i 0 i...

6大排序演算法比較

1 include stdio.h 2 include stdlib.h 3 include string.h 4 include time.h 5 6 define list init size 50000 7int bj1,yd1,bj2,yd2,bj3,yd3,bj4,yd4,bj5,yd5,...