資料結構八大排序演算法

2021-09-27 12:14:02 字數 3099 閱讀 5093

常見的八大排序演算法,他們之間關係如下:

#直接插入排序

definsert_sort

(l):

#遍歷陣列中的所有元素,其中0號索引元素預設已排序,因此從1開始

for x in

range(1

,len

(l))

:#將該元素與已排序好的前序陣列依次比較,如果該元素小,則交換

#range(x-1,-1,-1):從x-1倒序迴圈到0

for i in

range

(x-1,-

1,-1

):#判斷:如果符合條件則交換

if l[i]

> l[i+1]

: temp = l[i+1]

l[i+1]

= l[i]

l[i]

= temp

#希爾排序

definsert_shell

(l):

#初始化gap值,此處利用序列長度的一般為其賦值

gap =

(int)(

len(l)/2

)#第一層迴圈:依次改變gap值對列表進行分組

while

(gap >=1)

:#下面:利用直接插入排序的思想對分組資料進行排序

#range(gap,len(l)):從gap開始

for x in

range

(gap,

len(l)):

#range(x-gap,-1,-gap):從x-gap開始與選定元素開始倒序比較,每個比較元素之間間隔gap

for i in

range

(x-gap,-1

,-gap)

:#如果該組當中兩個元素滿**換條件,則進行交換

if l[i]

> l[i+gap]

: temp = l[i+gap]

l[i+gap]

= l[i]

l[i]

=temp

#while迴圈條件折半

gap =

(int

)(gap/

2)

# 簡單選擇排序

defselect_sort

(l):

#依次遍歷序列中的每乙個元素

for x in

range(0

,len

(l))

:#將當前位置的元素定義此輪迴圈當中的最小值

minimum = l[x]

#將該元素與剩下的元素依次比較尋找最小元素

for i in

range

(x+1

,len

(l))

:if l[i]

< minimum:

temp = l[i]

; l[i]

= minimum;

minimum = temp

#將比較後得到的真正的最小值賦值給當前位置

l[x]

= minimum

#氣泡排序

defbubble_sort

(l):

length =

len(l)

#序列長度為length,需要執行length-1輪交換

for x in

range(1

,length)

:#對於每一輪交換,都將序列當中的左右元素進行比較

#每輪交換當中,由於序列最後的元素一定是最大的,因此每輪迴圈到序列未排序的位置即可

for i in

range(0

,length-x)

:if l[i]

> l[i+1]

: temp = l[i]

l[i]

= l[i+1]

l[i+1]

= temp

#快速排序

#l:待排序的序列;start排序的開始index,end序列末尾的index

#對於長度為length的序列:start = 0;end = length-1

defquick_sort

(l,start,end)

:if start < end:

i , j , pivot = start , end , l[start]

while i < j:

#從右開始向左尋找第乙個小於pivot的值

while

(i < j)

and(l[j]

>= pivot)

: j = j-

1#將小於pivot的值移到左邊

if(i < j)

: l[i]

= l[j]

i = i+

1#從左開始向右尋找第乙個大於pivot的值

while

(i < j)

and(l[i]

< pivot)

: i = i+

1#將大於pivot的值移到右邊

if(i < j)

: l[j]

= l[i]

j = j-

1#迴圈結束後,說明 i=j,此時左邊的值全都小於pivot,右邊的值全都大於pivot

#pivot的位置移動正確,那麼此時只需對左右兩側的序列呼叫此函式進一步排序即可

#遞迴呼叫函式:依次對左側序列:從0 ~ i-1//右側序列:從i+1 ~ end

l[i]

= pivot

#左側序列繼續排序

quick_sort(l,start,i-1)

#右側序列繼續排序

quick_sort(l,i+

1,end)

:一畫素

:dreamcatcher-cx

資料結構八大排序

不穩定排序 一 選擇排序 例如 4 1 8 21 0 i j 0 4 8 21 1 將i的值存放到minindex中 arr j tmp 比較minindex和tmp的值 最後互換 void select sort int arr,int len 三 直接插入排序 穩定的演算法 無序 o n 2 有...

資料結構常見的八大排序演算法

python實現 排序演算法 內部排序 外部排序 內部排序 插入 選擇 交換 歸併 基數排序 插入排序 直接插入排序 希爾排序 選擇排序 簡單選擇排序 堆排序 交換排序 氣泡排序 快速排序 定義乙個公用函式 function swap myarray,p1,p2 function insertion...

八大排序演算法

1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...