| 排序算法 | 
平均时间复杂度 | 
最坏复杂度 | 
空间复杂度 | 
稳定性 | 
| 冒泡排序 | 
O(n2) | 
O(n2) | 
0(1) | 
稳定 | 
| 选择排序 | 
O(n2) | 
O(n2) | 
0(1) | 
不稳定 | 
| 直接插入排序 | 
O(n2) | 
O(n2) | 
0(1) | 
稳定 | 
| 快速排序 | 
O(nlogn) | 
O(n2) | 
O(logn) | 
不稳定 | 
| 归并排序 | 
O(nlogn) | 
O(nlogn) | 
O(1) | 
稳定 | 
| 堆排序 | 
O(nlogn) | 
O(nlogn) | 
0(1) | 
不稳定 | 
| 希尔排序 | 
O(nlogn) | 
O(n8)1 | 
O(1) | 
不稳定 | 
| 基数排序 | 
O(lognB) | 
O(lognB) | 
O(n) | 
稳定 | 
| 二叉树排序 | 
O(nlogn) | 
O(nlogm) | 
O(n) | 
稳定 | 
| 计数排序 | 
O(n + k) | 
O(n + k) | 
O(n+ k) | 
稳定 | 
# -*- coding:UTF-8 -*-
def bubble_sort(sort_list):
    """
    冒泡排序
    :param sort_list: 
    :return: 
    """
    length = len(sort_list)
    # 第一级遍历
    for index in range(length):
        # 第二级遍历
        for j in range(1, length - index):
            if sort_list[j - 1] > sort_list[j]:
                # 交换两者数据,这里没用temp是因为python 特性元组。
                sort_list[j - 1], sort_list[j] = sort_list[j], sort_list[j - 1]
    return sort_list
# -*- coding:UTF-8 -*-
def selection_sort(sort_list):
    """
    选择排序
    :param sort_list: 
    :return: 
    """
    n = len(sort_list)
    for i in range(0, n):
        min_value = i
        for j in range(i+1, n):
            if sort_list[j] < sort_list[min_value]:
                min_value = j
                sort_list[min], sort_list[i] = sort_list[i], sort_list[min]
    return sort_list
# -*- coding:UTF-8 -*-
def insert_sort(sort_list):
    """
    插入排序
    :param sort_list: 
    :return: 
    """
    n = len(sort_list)
    for i in range(1, n):
        # 后一个元素和前一个元素比较
        # 如果比前一个小
        if sort_list[i] < sort_list[i - 1]:
            # 将这个数取出
            temp = sort_list[i]
            # 保存下标
            index = i
            # 从后往前依次比较每个元素
            for j in range(i - 1, -1, -1):
                # 和比取出元素大的元素交换
                if sort_list[j] > temp:
                    sort_list[j + 1] = sort_list[j]
                    index = j
                else:
                    break
            # 插入元素
            sort_list[index] = temp
    return sort_list
# -*- coding:UTF-8 -*-
def shell_sort(sort_list):
    """
    希尔排序
    :param sort_list: 
    :return: 
    """
    n = len(sort_list)
    # 初始步长
    gap = n // 2
    while gap > 0:
        for i in range(gap, n):
            # 每个步长进行插入排序
            temp = sort_list[i]
            j = i
            # 插入排序
            while j >= gap and sort_list[j - gap] > temp:
                sort_list[j] = sort_list[j - gap]
                j -= gap
            sort_list[j] = temp
        # 得到新的步长
        gap = gap // 2
    return sort_list
# -*- coding:UTF-8 -*-
def quick_sort(arr):
    """
    快速排序
    :param arr:
    :return:
    """
    if len(arr) <= 1:
        return arr
    else:
        pivot = arr[0]
        return quick_sort([x for x in arr[1:] if x < pivot]) + \
               [pivot] + \
               quick_sort([x for x in arr[1:] if x >= pivot])