排序——选择排序、插入排序、冒泡排序、归并排序

import math
def select_sort(lists):
    """选择排序"""
    count = len(lists)
    for i in range(count):
        min = i
        for j in range(i+1,count):
            if lists[min] > lists[j]:
                min = j
        lists[i],lists[min] = lists[min], lists[i]
    return lists


def insert_sort(lists):
    """插入排序"""
    count = len(lists)
    for i in range(1, count):
        key = lists[i]
        j = i-1
        while j >= 0:
            if lists[j] > key:
                lists[j+1] = lists[j]
                lists[j] = key
            j -= 1
    return lists


def bubble_sort(lists):
    """冒泡排序"""
    count = len(lists)
    for i in range(count-1):
        for j in range(count-1-i):
            if lists[j] > lists[j+1]:
                lists[j], lists[j+1] = lists[j+1], lists[j]
    return lists


def merge(left,right):
    """分治"""
    result = []
    i, j = 0, 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result += left[i:]
    result += right[j:]
    return result


def merge_sort(lists):
    """归并排序"""
    if len(lists) <= 1:
        return lists
    count = len(lists)//2
    left = merge_sort(lists[:count])
    right = merge_sort(lists[count:])
    return merge(left, right)


if __name__ == '__main__':
    list = [3, 4, 2, 8, 9, 5, 1]
    for ele in list:
        print(ele, end=" ")
    print("\n")
    for ele in merge_sort(list):
        print(ele, end=" ")
3 4 2 8 9 5 1 

1 2 3 4 5 8 9 
Process finished with exit code 0

猜你喜欢

转载自www.cnblogs.com/caigouba/p/11315815.html