zoukankan      html  css  js  c++  java
  • python排序(冒泡、直接选择、直接插入等)

    冒泡排序

    冒泡法:第一趟:相邻的两数相比,大的往下沉。最后一个元素是最大的。

               第二趟:相邻的两数相比,大的往下沉。最后一个元素不用比。

     1 #冒泡排序
     2 array = [1,5,6,2,9,4,3]
     3 def bubble_sort(array):
     4     for i in range(len(array)-1):
     5         for j in range(len(array)-i-1):
     6             if array[j] > array[j+1]:
     7                 array[j],array[j+1] = array[j+1],array[j]
     8     return array
     9 
    10 bubble = bubble_sort(array)
    11 print(bubble)

    时间复杂度:O(n^2)

    稳定性:稳定

    改进:如果一趟比较没有发生位置变换,则认为排序完成

     1 array = [1,2,3,5,7]
     2 def bubble_sort(array):
     3     for i in range(len(array)-1):
     4         flag = 1   #建立标志位
     5         for j in range(len(array)-i-1):
     6             if array[j] > array[j+1]:
     7                 array[j],array[j+1] = array[j+1],array[j]
     8                 flag = 0
     9         if not flag:
    10             break
    11     return array
    12 
    13 bubble = bubble_sort(array)
    14 print(bubble)

    直接选择排序

    选择排序法:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放到序列的起始位置,直到全部排完。

     1 def select_sort(array):
     2     for i in range(len(array)-1):
     3         min = i
     4         for j in range(i+1, len(array)):
     5             if array[j] < array[min]:
     6                 min = j
     7         array[i], array[min] = array[min], array[i]
     8     return array
     9 
    10 array = [1,5,6,2,9,4,3]
    11 select = select_sort(array)
    12 print(select) 

    直接插入排序

    列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
    每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
    其实就相当于摸牌:

     1 def insert_sort(array):
     2     # 循环的是第二个到最后(待摸的牌)
     3     for i in range(1, len(array)):
     4         # 待插入的数(摸上来的牌)
     5         min = array[i]
     6         # 已排好序的最右边一个元素(手里的牌的最右边)
     7         j = i - 1
     8         # 一只和排好的牌比较,排好的牌的牌的索引必须大于等于0
     9         # 比较过程中,如果手里的比摸上来的大,
    10         while j >= 0 and array[j] < min:
    11             # 那么手里的牌往右边移动一位,就是把j付给j+1
    12             array[j+1] = array[j]
    13             # 换完以后在和下一张比较
    14             j -= 1
    15         # 找到了手里的牌比摸上来的牌小或等于的时候,就把摸上来的放到它右边
    16         else:array[j+1] = min
    17     return array
    18 
    19 list=[5,6,1,2,8,3,4]
    20 print(insert_sort(list))
  • 相关阅读:
    conda创建、删除、重命名环境
    jupyter notebook选择conda环境
    conda 创建tensorflow虚拟环境后,无法import tensorflow在jupyter
    labelme2coco
    MacOs 10.14.3 Matlab2018b 解决“找不到已安装的编译器 'Xcode Clang++'。错误使用mex,未找到合适的编译器”问题
    MaskRCNN 奔跑自己的数据
    labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
    kill 掉 占据端口的进程
    关于对多层嵌套的json字符串取目标值的问题
    关于Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法
  • 原文地址:https://www.cnblogs.com/pinpin/p/9862219.html
Copyright © 2011-2022 走看看