zoukankan      html  css  js  c++  java
  • 算法基础 --low三人组(冒泡,选择,插入)

    算法基础

    一、什么是算法?

      算法(Algorithm):一个计算过程,解决问题的方法。

    (1)时间复杂度

      时间复杂度:用来评估算法运行效率的一个东西

    print('Hello World')
    O(1)
    
    
    for i in range(n): 
       print('Hello World')
    O(n)
    
    
    for i in range(n): 
       for j in range(n):    
           print('Hello World')
    O(n2)
    
    
    for i in range(n):
        for j in range(n):
            for k in range(n):
                print('Hello World')
    O(n3)

    小结

     (2)空间复杂度

     空间复杂度:用来评估算法内存占用大小的一个式子

    二、算法事例

       1.二分查找

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

      es:使用二分查找来查找3

    def bin_search(data,val):
        low =0   #左边的第一个位置
        high = len(data) -1     #最右边的位置
        while low <= high:
            mid =(low +high)//2  #中间的位置
            if data[mid] == val:     #表示中间的位置找到
                return mid          #返回下标
            elif data[mid] >val:
                high =mid-1
            else:
                low =mid +1
        return                     #没找到就是返回 none



    时间复杂度:O(logn)

     2.冒泡排序

    首先,列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数……

    def bubble(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]  #  进行位置交换

    时间复杂度 : O(n2)

    如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束算法。

     2.冒泡排序

    思路:一趟遍历记录最小的数,放到第一个位置;
         再一趟遍历记录剩余列表中最小的数,继续放置;

    def select_sort(li):
        for i in range(len(li)):            #要执行的趟数
            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]  #交换



    时间复杂度:
    O(n2)
    
    

     3.插入排序

     思路:

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

    *****************抓牌,插牌***********

    def insert_sort(li):
        for i in range(1,len(li)):         #无序区剩下的牌数      
            tmp=li[i]                       #无序区的第一张牌
            j =i -1                         #有序区 的最后一张牌
            while j >=0 and tmp<li[j]:     #比较
                li[j+1] =li[j]              #有序区的牌往后移动
                j = j-1                     #往左进行比较
            li[j+1] =tmp                    #无序区取到的牌比有序区的牌都大


    时间复杂度:   O(n2)
     
  • 相关阅读:
    PHP compact() 函数
    JS动态插入HTML后不能执行后续JQUERY操作
    find命令
    服务提供者框架模式
    Ant的使用
    git的常用命令
    结合程序崩溃后的core文件分析bug
    设备特殊文件
    函数chdir、fchdir和getcwd
    静态库和动态库
  • 原文地址:https://www.cnblogs.com/zn0523/p/6925391.html
Copyright © 2011-2022 走看看