# 簡單選擇排序,從小到大排列
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...