python四种排序算法,冒泡、选择、插入、快速

2019-08-04  本文已影响0人  举颗凤梨

1.选择排序

def select_sort(array):
    length = len(array)
    for i in range(length):
        for j in range(i+1,length):
            if array[i] > array[j]:
                array[i],array[j] = array[j],array[i]
    return array

2.冒泡排序

def bubble_sort(array):
    length = len(array)
    for i in range(length):
        for j in range(0,length-i-1):
            if array[j] > array[j+1]:
                array[j],array[j+1] = array[j+1],array[j]
    return array

3.插入排序

def insert_sort(array):
    for i in range(1, len(array)):
        key = array[i]
        j = i - 1
        while j >= 0 and key < array[j]:
            array[j + 1] = array[j]
            j -= 1
        array[j + 1] = key

4.快速排序

def partition(arr, low, high):
    i = (low - 1)  # 最小元素索引
    pivot = arr[high]
    for j in range(low, high):
        # 当前元素小于或等于 pivot
        if arr[j] <= pivot:
            i = i + 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return (i + 1)
# arr[] --> 排序数组
# low  --> 起始索引
# high  --> 结束索引

# 快速排序函数
def quickSort(arr, low, high):
    if low < high:
        pi = partition(arr, low, high)
        quickSort(arr, low, pi - 1)
        quickSort(arr, pi + 1, high)

常见的时间复杂度高低排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
循环减半的过程,时间复杂度为O(logn)或O(log2n)

上一篇 下一篇

猜你喜欢

热点阅读