排序算法

线性查找

# -*- coding: utf-8 -*-

# Author: 桑葚ICE
# Email: 152516cc@gmail.com
# Blog: iicey.github.io
# JueJin: juejin.im/user/5c64dce8e51d45013c40742c

def search(arr, x):
    for i in range(len(arr)):
        if arr[i] == x:
            return i
    return -1

if __name__ == '__main__':
    print(search(['A', 'B', 'C', 'D', 'E'], 'D'))

冒泡排序

# -*- coding: utf-8 -*-

# Author: 桑葚ICE
# Email: 152516cc@gmail.com
# Blog: iicey.github.io
# JueJin: juejin.im/user/5c64dce8e51d45013c40742c

def bubble_sort(arr):
    n = len(arr)
    # 遍历所有数组元素
    for i in range(n):
        # Last i elements are already in place
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
            print(i, j, arr)
    return arr

if __name__ == '__main__':
    print(bubble_sort([64, 34, 25, 12, 22, 11, 90]))

插入排序

# -*- coding: utf-8 -*-

# Author: 桑葚ICE
# Email: 152516cc@gmail.com
# Blog: iicey.github.io
# JueJin: juejin.im/user/5c64dce8e51d45013c40742c

def insertion_sort(arr):
    for i in range(1, len(arr)):  # 默认第一个元素已经在有序序列中,从后面元素开始插入
        for j in range(i, 0, -1):  # 逆向遍历比较,交换位置实现插入
            if arr[j] < arr[j - 1]:
                arr[j], arr[j - 1] = arr[j - 1], arr[j]
            print(i, j, arr)
    return arr

if __name__ == '__main__':
    print(insertion_sort([23, 51, 436, 32, 54, 76, 6, 87, 789, 53, 6543, 5]))

堆排序

# -*- coding: utf-8 -*-

# Author: 桑葚ICE
# Email: 152516cc@gmail.com
# Blog: iicey.github.io
# JueJin: juejin.im/user/5c64dce8e51d45013c40742c

def heapify(arr, n, i):
    largest = i  # 父节点
    left = 2 * i + 1  # 左节点
    right = 2 * i + 2  # 右节点
    if left < n and arr[i] < arr[left]:
        largest = left
    if right < n and arr[largest] < arr[right]:
        largest = right
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]  # 交换
        heapify(arr, n, largest)
    print(f"n:{n}, i:{i}, largest:{largest}, left:{left}, right:{right}, arr:{arr}")

def heap_sort(arr):
    n = len(arr)
    for i in range(n, -1, -1):
        heapify(arr, n, i)
        # 一个个交换元素

    print('***********************')
    for i in range(n - 1, 0, -1):
        arr[i], arr[0] = arr[0], arr[i]
        print(arr)
        heapify(arr, i, 0)
    return arr

if __name__ == '__main__':
    print(heap_sort([2, 4, 3, 6, 5, 8, 7]))