Python 排序演算法和查詢演算法

2021-10-24 16:07:25 字數 4337 閱讀 7683

# 簡單選擇排序,從小到大排列

defselect_sort

(items, comp=

lambda x, y: x < y)

: items = items[:]

for i in

range

(len

(items)-1

):min_index = i

for j in

range

(i +1,

len(items)):

if comp(items[j]

, items[min_index]):

min_index = j

items[i]

, items[min_index]

= items[min_index]

, items[i]

return items

if __name__ ==

'__main__'

: s =[1

,2,3

,52,2

,3,1

,3,5

,6,2

,2,12

,12,12353,64

,75,75

]print

(select_sort(s)

)

# 氣泡排序

defbubble_sort

(items, comp=

lambda x, y: x > y)

: items = items[:]

for i in

range

(len

(items)-1

):false

for j in

range

(len

(items)-1

- i)

:if comp(items[j]

, items[j +1]

):items[j]

, items[j +1]

= items[j +1]

, items[j]

true

ifbreak

return items

if __name__ ==

'__main__'

: s =[1

,2,3

,52,2

,3,1

,3,5

,6,2

,2,12

,12,12353,64

,75,75

]print

(bubble_sort(s)

)

# 攪拌排序(氣泡排序公升級版)

defbubble_sort

(items, comp=

lambda x, y: x > y)

: items = items[:]

for i in

range

(len

(items)-1

):false

for j in

range

(len

(items)-1

- i)

:if comp(items[j]

, items[j +1]

):items[j]

, items[j +1]

= items[j +1]

, items[j]

true

false

for j in

range

(len

(items)-2

- i, i,-1

):if comp(items[j -1]

, items[j]):

items[j]

, items[j +1]

= items[j +1]

, items[j]

true

ifbreak

return items

if __name__ ==

'__main__'

: s =[1

,2,3

,52,2

,3,1

,3,5

,6,2

,2,12

,12,12353,64

,75,75

]print

(bubble_sort(s)

)

# 歸併排序

defmerge

(items1, items2, comp=

lambda x, y: x > y)

:'''將2個有序的列表合併成乙個有序的列表,生成的序列為從大到小排列'''

items =

index1, index2 =0,

0while index1 <

len(items1)

and index2 <

len(items2)

:if comp(items1[index1]

, items2[index2]):

) index1 +=

1else:)

index2 +=

1 items += items1[index1:

] items += items2[index2:

]return items

defmerge_sort

(items, comp=

lambda x, y: x > y)

:return _merge_sort(

list

(items)

, comp)

def_merge_sort

(items, comp):if

len(items)

<2:

return items

mid =

len(items)//2

left = _merge_sort(items[

:mid]

, comp)

right = _merge_sort(items[mid:

], comp)

return merge(left, right, comp)

if __name__ ==

'__main__'

: s =[1

,2,3

,52,2

,3,1

,3,5

,6,2

,2,12

,12,12353,64

,75,75

]print

(merge_sort(s)

)

# 順序查詢,查詢列表中第一次出現該元素的位置

defseq_search

(items, key)

:for index, item in

enumerate

(items)

:if item == key:

return index

return-1

if __name__ ==

'__main__'

: s =[1

,2,3

,52,2

,3,1

,3,5

,6,2

,2,12

,12,12353,64

,75,75

]print

(seq_search(s,2)

)

# 折半查詢,元素第一次出現的位置

defbin_search

(items, key)

: start, end =0,

len(items)-1

while start <= end:

mid =

(start + end)//2

if key > items[mid]

: start = mid +

1elif key < items[mid]

: end = mid -

1else

:return mid

return-1

if __name__ ==

'__main__'

: s =[1

,2,3

,52,2

,3,1

,3,5

,6,2

,2,12

,12,12353,64

,75,75

]print

(bin_search(s,2)

)

排序演算法和查詢演算法

法是用來解決常見問題的方法 同乙個問題可以採用多種方法解決,不同 方法適用於不同的環境 排序指的是把一組數字按照某種順序排列好 排序演算法分很多次重複執行,每次負責把 乙個數字放在合適的位置上 為了實現以上效果可以先確定數字然後查詢 位置也可以先確定位置然後查詢數字 通過不斷調整兩個數字的相互順序最...

排序演算法和查詢

排序和查詢例項 內部排序 交換式 冒泡 快速排序法 選擇式 選擇 堆排序 插入 插入 謝爾 二叉樹 式排序 外部排序 合併 直接合併排序 隨機產生陣列 public int getarray int n for int i 0 i 7.2選擇排序 選擇排序法 class xuanze if i mi...

各種排序演算法和查詢演算法

自己實現了一遍氣泡排序 選擇排序 插入排序,留個念想 氣泡排序 簡單來說就是從陣列末端冒泡到陣列當前位置 void bubblesort unsigned char data,unsigned short length 選擇排序 當前位置之後的所有數跟當前位置的數比較,得到最小的數到當前位置 voi...