zoukankan      html  css  js  c++  java
  • 算法之常见的排序算法

    一、冒泡排序

    @run_time
    def bubble_sort(data_list):
        """
        冒泡排序:
        首先拿到第一个元素,和它第二个作比较,把较大的数放在右边
        第二个再和第三个比较。。。。一轮下来,最后一个就是最大的数
        再一轮,倒数第二个也变成有序的......最终都变成有序的
        :param data_list:
        :return:
        """
        # [6,3,2,7,8,9,5,1,4]
        # []
        for i in range(len(data_list)):
            flag = True  # 做一个标记,看是否在冒泡的过程中发生数据交换
            for j in range(len(data_list) - i - 1):
                # [6,3]做对比,换成[3,6] ,然后 [6,2] 做对比......
                if data_list[j] > data_list[j + 1]:
                    data_list[j], data_list[j + 1] = data_list[j + 1], data_list[j]
                    flag = False
            if flag:
                # 如果没有发生数据交互,那么数据本身就是排好序的
                break

    二、选择排序

    @run_time
    def select_sort(data_list):
        """
        选择排序:
        不断找到最小的(找最大的也是可以的)
        首先拿到第一个,然后发现比它小的,记住下标。循环一轮,找到最小的数的位置 和 最左边的数交换位置
        然后从第二个开始....和第二个交换位置,
       .....开始变得越来越有序 :param data_list: :return:
    """ # [6,3,2,7,8,9,5,1,4] for i in range(len(data_list)): # 做一个标记 flag = True # 当前元素无序区的第一个元素是最小的 min_loc = i for j in range(i + 1, len(data_list)): # 循环遍历无序区 if data_list[j] < data_list[min_loc]: # 如果无序区的元素比假定的小,那将该元素标记为最小的 min_loc = j flag = False # 循环遍历结束,将无序区的最小元素和第一个元素的位置做一下交换 if flag: continue data_list[i], data_list[min_loc] = data_list[min_loc], data_list[i]

    三、插入排序

    @run_time
    def insert_sort(data_list):
        """
        插入排序:有点像抓牌,插牌
       手中刚开始有一张牌,一张牌当然是有序的
       再把第二张牌拿到手里 和 第一张比较是否需要交换位置,然后手中的两张牌变得有序了
       再拿第三张牌,和手中的牌 从右边开始比较 ,如有需要交换位置
       ......
       所有的牌都到手里,手里的牌都变成有序的
    :param data_list: 将数据传递过来 :return: 返回有序的list
    """ for i in range(1, len(data_list)): # 从第二数据开始 for j in range(0, i): # 它左边的数字都是有序的 if data_list[i] < data_list[j]: # 如果这数字比左边的某个数字小,则交换这两个数字的位置 data_list[i], data_list[j] = data_list[j], data_list[i]

      

  • 相关阅读:
    洛谷P3811题解
    洛谷P3353在你窗外闪耀的星星-题解
    Map根据value来排序
    java8 groupby count
    Java反射
    maven profile环境切换
    获取nginx代理情况下的真实ip
    获取request里header的name和value
    git 删除iml文件
    java list 排序
  • 原文地址:https://www.cnblogs.com/skiler/p/6852846.html
Copyright © 2011-2022 走看看