python基本排序算法

一、冒泡排序
冒泡排序是经过n次循环,每次循环对数据进行前后两个数对比,每次循环都把前n-i个数中的最大值往后放,最终使整个数组变成有序数组,时间复杂度为O(n²)(n为数组的长度)

def bubble_sort(data_list):
    length = len(data_list)
    for i in range(length):
        for j in range(length-i-1):
            # 两两对比,小于就交换位置
            if data_list[j+1] < data_list[j]:
                data_list[j+1], data_list[j] = data_list[j], data_list[j+1]
     return data_list

二、快速排序
快速排序是冒泡排序的一种改进,采用分制的方法,取一个数为基准,比基准小的放左边,比基准大的放右边,然后对左右两边的进行同样的操作,直到最后数组不能拆分成左右两边,时间复杂度O(n²)

def quick_sort(data_list):
    if len(data_list) < 2:
        return data_list
    temp = data_list[0]
    data_list.remove(temp)
    left_list = []
    right_list = []
    for i in range(len(data_list)):
        # 比基数小的放到一边,比基数大的放到另一边
        if data_list[i] <= temp:
            left_list.append(data_list[i])
        else:
            right_list.append(data_list[i])
    return left_list + [temp] + right_list

三、插入排序
插入排序类似扑克牌,假设右手去抓拍,左手收集右手抓到的牌,左手的牌根据从小到大的规则依次插入,时间复杂度O(n²)

def insert_sort(data_list):
    for i in range(1, len(data_list)):
        for j in range(i, 1, -1):
            # 从后往前找,如果小于,就往前放,如果大于,说明已经是最大的(因为前面都是从小到大排序)
            if data_list[j] < data_list[j-1]:
                data_list[j], data_list[j, -1] = data_list[j-1], data_list[j]
            else:
                break

四、选择排序
选择排序是从未排序的数组中找到最小(大)的数放到最开始(末尾)位置,每次找到一个,直到全部排序完成

def choice_sort(data_list):
    for i in range(len(data_list)):
        min_index = i
        for j in range(i+1, len(data_list)):
            # 后面的每个数和当前找到的最小的对比,比当前小的直接替换当前索引,成为最小的
            if data_list[j] < data_list[min_index]:
                min_index = j
        if i != min_index:
            data_list[i], data_list[min_index] = data_list[min_index], data_list[i]
    return data_list
posted @ 2020-04-01 21:33  rrh  阅读(153)  评论(0编辑  收藏  举报