zoukankan      html  css  js  c++  java
  • 二分、冒泡、选择、插入排序

    1、二分查找

      从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。
    示例(使用二分查找3):

    二分查找代码:

    def bin_search(data_set, val):
        low = 0
        high = len(data_set) - 1
        while low <= high:
            mid = (low+high)//2
            if data_set[mid] == val:
                return mid
            elif data_set[mid]< val:
                low = mid + 1
            else:
                high = mid - 1
       
    

     2、冒泡排序

      列表有n个数,列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数……
      一共冒泡n-1趟,第 i 趟交换 n-i-1 次。

      时间复杂度 o(n^2) 。

    代码如下

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

     冒泡排序优化:

    def bubble_sort_1(li):
        for i in range(len(li) - 1):
            exchange = False
            for j in range(len(li) - i - 1):
                if li[j] > li[j+1]:
                    li[j], li[j+1] = li[j+1], li[j]
                    exchange = True
            if not exchange:
                break
    

     优化后的冒泡排序时间复杂度 o(n^2) ,最好的时间复杂度是 o(n) 。

    3、选择排序

      一趟遍历记录最小的数,放到第一个位置;一趟遍历记录最小的数,放到第一个位置;……

      时间复杂度 o(n^2) 。

    代码如下

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

     4、插入排序

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

      时间复杂度 o(n^2) 。

    代码如下

    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
    
    Dylan
  • 相关阅读:
    Spring Boot从Controller层进行单元测试
    CentOS7搭建Flume1.6环境
    CentOS7安装Zookeeper3.4.11+HBase1.3.3
    Hadoop1.x的单点问题与Hadoop2.x HA原理
    Hadoop2.x——Yarn原理
    CentOS7安装scala2.11.8+spark2.0.2
    CentOS7搭建Hive1.2.2+mysql5.7
    搭建集群环境(CentOS7+Hadoop2.6.1+SSH)
    消除“if...else”实战
    SpringCloud Eureka服务治理机制
  • 原文地址:https://www.cnblogs.com/dylan123/p/10698064.html
Copyright © 2011-2022 走看看