[Python] Sorting algorithm (comparative sorting)

One, binary search

"""
二分法:针对有序数列(递增或递减数列)
角标(最小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))

Test Results:

 

Two, select sorting algorithm

"""
选择排序:
从第一个数字开始与后面的每一个数进行比较。若大于则调换位置。(最先找到最小值)
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)

 Test Results:

 

Three, bubble sorting algorithm

"""
冒泡排序:
从第一个数字开始只和紧跟后面的那位比较大小。若大于则调换位置。(最先找到最大值)
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)

Test Results:

 

Four, insertion sort algorithm

"""
插入排序:从第二个数字开始,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)

Test Results:

 

Guess you like

Origin blog.csdn.net/trichloromethane/article/details/108696410