def
bubble_sort
(arry)
:#獲得陣列的長度
n =len(arry)
for i in
range
(n):
for j in
range(1
,n-i)
:#如果前者比後者大
if arry[j-1]
> arry[j]
:#則交換兩者
arry[j-1]
,arry[j]
= arry[j]
,arry[j-1]
return arry
def
select_sort
(ary)
: n =
len(ary)
for i in
range(0
,n):
#最小元素下標標記
min= i
for j in
range
(i+1
,n):
if ary[j]
< ary[
min]
:#找到最小值的下標
min= j
#交換兩者
ary[
min]
,ary[i]
= ary[i]
,ary[
min]
return ary
def
insert_sort
(ary)
: n =
len(ary)
for i in
range(1
,n):
if ary[i]
< ary[i-1]
: temp = ary[i]
#待插入的下標
index = i
#從i-1 迴圈到 0 (包括0)
for j in
range
(i-1,-
1,-1
):if ary[j]
> temp :
ary[j+1]
= ary[j]
#記錄待插入下標
index = j
else
:break
ary[index]
= temp
return ary
def
quick_sort
(ary)
:return qsort(ary,0,
len(ary)-1
)def
qsort
(ary,left,right)
:#快排函式,ary為待排序陣列,left為待排序的左邊界,right為右邊界
if left >= right :
return ary
key = ary[left]
#取最左邊的為基準數
lp = left #左指標
rp = right #右指標
while lp < rp :
while ary[rp]
>= key and lp < rp :
rp -=
1while ary[lp]
<= key and lp < rp :
lp +=
1 ary[lp]
,ary[rp]
= ary[rp]
,ary[lp]
ary[left]
,ary[lp]
= ary[lp]
,ary[left]
qsort(ary,left,lp-1)
qsort(ary,rp+
1,right)
return ary
def
heap_sort
(ary)
: n =
len(ary)
#最後乙個非葉子節點
first =
int(n/2-
1)#構造大根堆
for start in
range
(first,-1
,-1)
:
max_heapify(ary,start,n-1)
#堆排,將大根堆轉換成有序陣列
for end in
range
(n-1,0
,-1)
:
ary[end]
,ary[0]
= ary[0]
,ary[end]
max_heapify(ary,
0,end-1)
return ary
#最大堆調整:將堆的末端子節點作調整,使得子節點永遠小於父節點
#start為當前需要調整最大堆的位置,end為調整邊界
defmax_heapify
(ary,start,end)
: root = start
while
true
:#調整節點的子節點
child = root*2+
1if child > end :
break
if child+
1<= end and ary[child]
< ary[child+1]
:#取較大的子節點
child = child+
1#較大的子節點成為父節點
if ary[root]
< ary[child]
:#交換
ary[root]
,ary[child]
= ary[child]
,ary[root]
root = child
else
:break
用Python實現各種排序演算法
比較相鄰的元素大小,將小的前移,大的後移,就像水中的氣泡一樣,最小的元素經過幾次移動,會最終浮到水面上。def bubble list for i in range len list for j in range 0,len list 1 i if list j list j 1 list j li...
各種排序演算法的Python實現
最近剛剛接觸python,python語法簡潔清晰,具有很好的易讀性,編寫的演算法可以很容易的看出其本質。故而用python編寫演算法,既可以熟悉演算法,又可以練習python,何樂而不為呢?插入排序 def insertsort lists for i in range 0,len lists 1...
各種排序演算法實現
1 選擇排序 最壞情況 時間複雜度為o n 2 平均時間複雜度o n 2 最好情況 時間複雜度為o n 2 最差空間複雜度 需要輔助空間o 1 不是穩定排序 實現 void swap int a,int b void selectionsort int a,int n if k i swap a i...