zoukankan      html  css  js  c++  java
  • 排序算法之low B三人组

    排序算法之low B三人组

    排序low B三人组

    列表排序:将无序列表变成有充列表

    应用场景:各种榜单,各种表格,给二分法排序使用,给其他算法使用

    输入无序列表,输出有序列表(升序或降序)

    排序low B三人组

    1. 冒泡排序

    首先,列表每两个相邻的数做比较,如果前边的数比后边的数大,那么交换这两个数

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

    冒泡排序的优化

    如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束排序

    def bubble_sort_1(l1):
        for i in range(len(l1)-1):
            flag=False
            
            for j in range(len(l1)-i-1):
                if l1[j] > l1[j+1]:
                    l1[j],l1[j+1]=l1[j+1],l1[j]
                    flag=True
            
            if not flag:
                return l1

    2. 选择排序

    一趟遍历记录中最小的数,放到第一个位置
    再一趟遍历记录剩余列表中最小的数,继续放置

        def select_sort(l1):
            for i in range(len(l1)-1):
                mid=i
        
                for j in range(i+1,len(l1)):
                    if l1[j] <l1[mid]:
                        mid=j
        
                l1[mid],l1[i]=l1[i],l1[mid]
        
            return l1

    3. 插入排序

    列表被分有有序区和无序区两个部分.最初有序区只有一个元素

    每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空

    例如,最初时有一个无序列表l1=[5,7,4,6,3,1,2,9,8],其使用插入排序时的步骤为:

    1.取无序列表l1中的第一个元素5,放入另一个有序列表tmp中
    2.取无序列表l1中的第二个元素7,因为7比5大,把7放入有序列表tmp的第二个位置
    3.取无序列表l1中的第三个元素4,因为4比5小,所以把4放入到有序列表tmp的元素5的左边中,此时有序列表tmp为[4,5,7]
    4.取l1中第四个元素6,因为6比5大,又比7小,把6放入到元素5和7之间,此时tmp变成了[4,5,6,7]
    ...
    每次从无序区中选择一个元素,插入到有序区的某个位置,直到无序区变空
    def insert_sort(li):
        for i in range(1, len(li)):
            tmp = li[i]
            j = i - 1       #手里最后一张
            while j>=0 and li[j]>tmp:
                li[j+1]=li[j]
                j = j-1
            li[j+1] = tmp
            
        return li  
  • 相关阅读:
    springcolud 的学习(一),架构的发展史
    shiro框架的学习
    Mybatis分页插件PageHelper简单使用
    对于解决VS2015启动界面卡在白屏的处理方法
    C# 运行流程
    转:什么是DIP、IoC、DI
    IQueryable,IEnumerable,IList区别
    easyUi——datetimebox绑定数据失效
    前后端参数传递的学习笔记
    java 多线程学习总结
  • 原文地址:https://www.cnblogs.com/zgd1234/p/8583024.html
Copyright © 2011-2022 走看看