"""
二分查詢:一定是基於有序集合來進行的。
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 希爾...