• 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
    
  • 相关阅读:
    sublime 标题乱码,内容正常
    解决PHP7+ngnix+yaf框架404的问题
    调用RPC接口出现错误:Yar_Client_Transport_Exception (16) curl exec failed 'Timeout was reached'
    xhprof安装和使用
    单点登录
    如何让局域网内Apache互相访问
    lnmp
    virtualbox
    微信省市区 Mysql数据库
    lnmp
  • 原文地址:https://www.cnblogs.com/yuruhao/p/12595929.html
Copyright © 2020-2023  润新知