常見的八大排序演算法,他們之間關係如下:
#直接插入排序
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 ...