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  
  • 相关阅读:
    【反射】Java反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/zgd1234/p/8583024.html
Copyright © 2011-2022 走看看