1つ、バイナリ検索
"""
二分法:针对有序数列(递增或递减数列)
角标(最小min_index,最大max_index,中间mid_index)
要寻找的数字key
若key不等于mid,一直寻找
若key大于mid,min_index + 1
若key小于mid,max_index + 1
如果min_index > max_index,则表示不存在返回值为-1
若key等于mid,直接返回结果
"""
def binarySearch(lst,key):
min_index = 0
max_index =len(lst) - 1
mid_index = (max_index + min_index) // 2
while lst[mid_index] != key:
if lst[mid_index] < key:
min_index = lst[mid_index] + 1
elif lst[mid_index] > key:
max_index = lst[mid_index] - 1
if min_index > max_index:
return -1
mid_index = (max_index + min_index) // 2
return mid_index
lst = [x for x in range(1,13)]
print(binarySearch(lst,9))
print(binarySearch(lst,8.5))
試験結果:
2つ目は、並べ替えアルゴリズムを選択する
"""
选择排序:
从第一个数字开始与后面的每一个数进行比较。若大于则调换位置。(最先找到最小值)
2,1,3,5,7,9,6,8,4
0 1 2 3 4 5 6 7 8
i j
第一轮:0 vs 1-8
第二轮:1 vs 2-8
...
第五轮:4 vs 5-8
...
第七轮:6 vs 7-8
第八轮:7 vs 8
"""
def SelectionSort(list):
for i in range(len(list)-1):
for j in range(i +1,len(list)):
if list[i] > list[j]:
list[i],list[j] = list[j],list[i]
list =[5,1,9,8,2,6,7,4,3]
SelectionSort(list)
print(list)
試験結果:
3、バブルソートアルゴリズム
"""
冒泡排序:
从第一个数字开始只和紧跟后面的那位比较大小。若大于则调换位置。(最先找到最大值)
2,1,3,5,7,9,6,8,4
0 1 2 3 4 5 6 7 8
j j+1
第一轮:0-7 vs 1-8
第二轮:0-6 vs 1-7
...
第五轮:0-3 vs 1-4
...
第七轮:0-1 vs 1-2
第八轮:0-0 vs 1-1
"""
def BubbleSort(list):
for i in range(len(list)-1):
for j in range(len(list)-1-i):
if list[j] > list[j + 1]:
list[j],list[j + 1] = list[j + 1],list[j]
list = [5,1,9,8,2,6,7,4,3]
BubbleSort(list)
print(list)
試験結果:
4、挿入ソートアルゴリズム
"""
插入排序:从第二个数字开始,e=lst[i]
i
5 1 9 8 2 6 7 4 3
0 1 2 3 4 5 6 7 8
j-1 j
"""
def insertionSort(lst):
for i in range(1,len(lst)):
e = lst[i]
j = i
while j > 0 and lst[j - 1] > e:
lst[j] = lst[j - 1]
j -= 1
lst[j] = e
lst = [5,1,9,8,2,6,7,4,3]
insertionSort(lst)
print(lst)
試験結果: