Python資料結構之排序

2021-08-30 13:53:13 字數 3237 閱讀 4600

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 希爾...