zoukankan      html  css  js  c++  java
  • Python实现 -- 冒泡排序、选择排序、插入排序

    冒泡排序

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

    冒泡排序的原理:

    1. 比较两个相邻的元素,如果第一个比第二个大,就交换他们
    2. 对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    3. 针对所有的元素重复以上的步骤,除了最后一个。
    4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    越大的元素会经由交换慢慢“浮”到数列的顶端。

    def maopao(l):
        for i in range(len(l)):
            for j in range(len(l) - i - 1):
                if l[j] > l[j+1]:
                    l[j],l[j+1] = l[j+1],l[j]
        return l
    
    
    import random
    
    l = list(range(100))
    # 随机打乱列表
    random.shuffle(l)
    print(maopao(l))

    选择排序

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

    选择排序是不稳定的排序方法。

    选择排序原理:

    1. 我们假设第一个数最小,记录他的位置
    2. 然后同之后的每一个数比较,如果有小于这个数的,就记录它的索引
    3. 每次将无序区最小的放到有序区的起始位置

    def select_sort(l):
    
        for i in range(len(l)):
            min_loc = i
            for j in range(i+1,len(l)):
                if l[min_loc] > l[j]:
                    min_loc = j
            if min_loc != i:
                l[i],l[min_loc] = l[min_loc],l[i]
    
        return l
    
    import random
    
    l = list(range(10))
    # 随机打乱列表
    random.shuffle(l)
    print(select_sort2(l))

    插入排序

    插入排序:列表被分为有序区和无序区两个部分。假设最初有序区只有一个元素。每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。

    思路:

    1. 记录摸到的牌

    2. 记录手里最后一张牌的位置

    3. 开始 摸牌插牌

    4. 摸到的牌小于 手里的牌

    5. 手里最后一张牌往后移

    6. 手里倒数第二张牌的位置

    def insert_sort(l):
    
        for i in range(1,len(l)):
            tmp = l[i]
            j = i - 1 
            while True: 
                if j >= 0 and tmp < l[j]:
                    l[j + 1] = l[j] 
                    j = j - 1
                elif l[j] < tmp or j == -1:
                    l[j + 1] = tmp
                    break
        return l
    
    
    import random
    
    l = list(range(100))
    # 随机打乱列表
    random.shuffle(l)
    print(insert_sort(l))
  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9439865.html
Copyright © 2011-2022 走看看