基本算法

算法基本概念

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

时间复杂度:基本语句的输出次数O(1),O表示大约,
    时间复杂度是用来估算法运行时间的一个式子(单位)。

    一般来说,时间复杂度高的算法比复杂度低的算法慢。

    常见的时间复杂度(按效率排序)
        O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^2logn)<O(n^3)
    《算法导论》

    如何一眼判断时间复杂度?
        循环减半的过程-》O(logn)
        几次循环就是n的几次方的复杂度
        
空间复杂度:用来评估算法内存占用大小的式子
“空间换时间”


列表查找:从列表中查找指定元素
    输入:列表、待查找元素
    输出:元素下标或未查找到元素
    
    方法:
    
    顺序查找:
        从列表的第一个元素开始,顺序进行搜索,直到找到为止
    
    二分法查找(列表必须是有序的):
        从有序列表的侯选区data[0:n]开始,通过对待查找的值
        与候选区中间值进行比较,可以使侯选区减少一半。


列表排序:将无序列表变为有序列表

    应用场景:
        各种榜单
        各种表格
        给二分查找用
        给其他算法用
        
    输入:无序列表
    输出:有序列表
        
    升序与降序
    方法:
    时间复杂度讨论----最好情况下、平均情况下和最坏情况下
        排序low B三人组:
            冒泡
                思路:列表每两个相邻的数,如果前边的比后边的大,
                就交换这两个数
                
                代码关键点:
                    躺
                    无序区
                
            选择
                思路:一趟遍历记录最小的数,放到第一个位置;
                再一趟遍历记录剩余列表中最小的数,继续放置......
                代码关键点:
                    无序区
                    最小数的位置
            插入
                思路:列表被分为有序区和无序区;最初有序区只有一个元素。
                每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
        排序NB三人组:
            快速排序
                思路:取一个元素P(第一个元素),使元素P归位;
                归位就是列表被P分为两个部分,左边都比P小,右边
                的都比P大;递归完成排序
                代码关键点:
                    整理
                    递归
                
            堆排序
            归并排序
        没什么人用的排序:
            基数排序
            希尔排序
            桶排序
            计数排序
    算法关键点:
        有序区
        无序区
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
        
        
        
        
        
        
        
        
        
        
        






















posted @ 2019-10-14 19:10  Mr_Yun  阅读(270)  评论(0)    收藏  举报