python資料結構之排序

2021-10-09 19:26:49 字數 3850 閱讀 2593

"""

二分查詢:一定是基於有序集合來進行的。

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 =

len(alsit)

mid =

(low + high)//2

if key > alsit[mid]

: low = mid +

1elif key < alsit[mid]

: high = mid -

1else

:return mid

print

(find(5)

)# # 氣泡排序

alist =[3

,8,5

,7,6

]def

bubbl_sort

(alist)

:for i in

range

(len

(alist)-1

):for j in

range

(len

(alist)-1

- i)

:if alist[j]

> alist[j+1]

: alist[j]

, alist[j+1]

= alist[j+1]

, alist[j]

return alist

print

(bubbl_sort(alist)

)# 選擇排序

alist =[3

,8,5

,7,6

]# 將亂序中的最大值找出放在尾部交換位置

defselect_sort

(alist)

:for j in

range

(len

(alist)-1

):max_index =

0for i in

range(1

,len

(alist)

-j):

if alist[max_index]

< alist[i]

: max_index = i

alist[

len(alist)-1

-j], alist[max_index]

= alist[max_index]

, alist[

len(alist)

-j-1

]return alist

print

(select_sort(alist)

)# 插入排序

# 把右邊的元素往左插,保證左側一直有序

alist =[3

,8,5

,7,6

]# def insert_sort(alist):

# for i in range(1, len(alist)):

# temp = alist[i]

# for j in range(i-1,-1,-1):

# """如果左邊有序列表的尾部元素比待插入的大,則往右移,再比較尾部左側"""

# if alist[j] > temp:

# alist[j+1] = alist[j]

# else:

# alist[j+1] = temp

# break

# return alist

definsert_sort

(alist)

:for i in

range(1

,len

(alist)):

while i >0:

if alist[i]

< alist[i-1]

: alist[i]

, alist[i-1]

= alist[i-1]

, alist[i]

i -=

1else

:break

return alist

print

(insert_sort(alist)

)# 希爾排序

# gap:

# 增量的值

# 拆分的組數

# 對每一組進行直接插入排序

alist =[3

,8,5

,7,6

]def

shell_sort

(alist)

: gap =

len(alist)//2

while gap >0:

for i in

range

(gap,

len(alist)):

while i >0:

if alist[i]

< alist[i - gap]

: alist[i]

, alist[i - gap]

= alist[i - gap]

, alist[i]

i -= gap

else

:break

gap //=

2return alist

print

(shell_sort(alist)

)# 快速排序

# 1.指定乙個基數(亂序中的第乙個資料值)

# 2.將比基數小的數放置在基數的左側,比基數大的數放在基數的右側

# 3.從又開始偏移high

alist =[49

,38,65

,97,76

,13,27

,49]def

quikly_sort

(alist, low, high)

:if low < high:

i = low

j = high

key = alist[i]

while i < j:

while i < j and alist[j]

>= key:

j -=

1if i < j:

alist[i]

= alist[j]

i +=

1while i < j and alist[i]

< key:

i +=

1if i < j:

alist[j]

= alist[i]

j -=

1 alist[i]

= key

# 基數已經有了正確的順序位置,我們只需把基數左邊的和右邊的序列再遞迴找正確的位置

quikly_sort(alist, low, i-1)

quikly_sort(alist, i+

1, high)

quikly_sort(alist,0,

len(alist)-1

)print

(alist)

Python資料結構之排序

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

資料結構之排序

在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對次序發生變化,則稱這種排序方法是不穩定的。穩定的排序 時間複雜度 空間複雜度 氣泡排序 最差和平均是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 希爾...