def
bubble_sort
(li)
:"""氣泡排序"""
for j in
range
(len
(li)-1
,0,-
1):# 每次遍歷需要比較的次數,逐漸減小
for i in
range(0
, j)
:# 比較相鄰兩數,大的放右邊
if li[i]
> li[i+1]
: li[i]
, li[i+1]
= li[i+1]
, li[i]
def
select_sort
(li)
: n =
len(li)
for j in
range
(n-1):
# 進行n-1次排序
min_index = j # 最小序列
for i in
range
(j+1
, n)
:if li[i]
< li[min_index ]
: min_index = i # 選出最小序列
if min_index != j:
li[j]
, li[min_index ]
= li[min_index ]
, li[j]
def
insert_sort
(li)
:"""插入排序"""
# 從第二個元素下標開始比較
for i in
range(1
,len
(li)):
for j in
range
(i,0,-
1):# 假設乙個有序數列
# 從第j 個元素開始向前比較,遇到小的則交換。
if li[j]
< li[j -1]
: li[j]
, li[j -1]
= li[j -1]
, li[j]
else
: brea
def
shell_sort
(li)
: n =
len(li)
# 確定初始步長:
gap = n //
2while gap >0:
# 按照步長,進行插入排序
for i in
range
(gap, n)
: j = i
while j >= gap and li[j]
< li[j-gap]
: li[j]
, li[j-gap]
= li[j-gap]
, li[j]
j -= gap
gap //=
2
def
quick_sort
(li, start, end)
:"""
快速排序
:param li: 需要排序的列表
:param start: 起始下標
:param end: 結束下標
:return:
"""# 退出遞迴條件
if start >= end:
return
# 取開始數為基準數
mid = li[start]
# 序列從左向右游標
life = start
# 序列從右向左游標
right = end
while left < right:
# 先從右游標開始移動
while left < right and li[right]
> mid:
right -=
1# 右游標的數交給坐游標
li[life]
= li[right]
# 從左往右移動
while left < right and li[left]
<= mid:
left +=
1 li[right]
= li[left]
# 退出迴圈後,low與high重合,此時所指位置為基準元素的正確位置
# 將基準元素放到該位置
li[left]
= mid
# 遞迴
quick_sort(li, start, left -1)
quick_sort(li, left +
1, end)
def
merge_sort
(li)
:"""歸併排序"""
n =len(li)
# 遞迴的退出條件
if n ==1:
return li
mid = n //
2 left_li = li[
:mid]
right_li = li[mid:
]# 對左半部分排序,按照歸併思想
left_sorted_li = merge_sort(left_li)
# 對右半部分進行排序
right_sorted_li = merge_sort(right_li)
# 設定2個游標
left, right =0,
0 left_n =
len(left_sorted_li)
right_n =
len(right_sorted_li)
# 進行合併
merged_li =
while left < left_n or right < right_n:
if left_sorted_li[left]
<= right_sorted_li[right]:)
left +=
1else:)
right +=
1# 退出迴圈時表示有乙個列表的所有元素都已經新增到新的列表中
# 處理剩下的列表
merged_li.extend(left_sorted_li[left:])
merged_li.extend(right_sorted_li[right:])
return merged_li
python資料結構之排序
二分查詢 一定是基於有序集合來進行的。1 2 3 4 5 6 7 key middle key在middle右邊 key在middle左邊 氣泡排序 選擇排序 插入排序 希爾排序 快速排序 折半查詢 alsit 0 1,2 3,4 5,6 7,8 9 def find key low 1 high ...
資料結構之排序
在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對次序發生變化,則稱這種排序方法是不穩定的。穩定的排序 時間複雜度 空間複雜度 氣泡排序 最差和平均是o n2 最好是o n 1 雙向氣泡排序 最...
資料結構之排序
package com.small 注意a 0 是否有意思,書上c語言基本都是將a 0 作為哨兵,那麼0號元素不能用,我這裡全部是flag代替 author small leaf public class sort else for j i 1 j high 1 j a high 1 flag 希爾...