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))
  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9439865.html
Copyright © 2011-2022 走看看