zoukankan      html  css  js  c++  java
  • 排序算法总结

    时间复杂度

    0(1)<0(logn)<0(n)<0(nlogn)<o(n2)<...<0(n!)

    冒泡排序

    算法:在数组x[n]中,从第一个数开始,拿x[i]x[i+1]比较,如果x[i]>x[i+1],交换两个数,这样遍历一遍数组后,最大的元素排在了最后面;然后第二次比较剩下的n-1个数;直到完成所有的排序,由于每次都是把最大的排在最后面,称为冒泡排序。

    def bubble_sort(mylist):
        for i in range(len(mylist)):
            for j in range(len(mylist)-1-i):
                if mylist[j]<mylist[j+1]:
                    mylist[j],mylist[j+1]=mylist[j+1],mylist[j]
        print (mylist)
    
    bubble_sort([1,43,2,42,3443])
    

    插入排序

    第一次从第2个元素开始排序,key=x[2],与x[1]比较;第二次从第3个元素开始排序,先与x[2]比较,最差还要与x[1]比较。。。。。

    def insert_sort(mylist):
        for i in range(1,len(mylist)):
            key = mylist[i]
            j = i-1
            while j >= 0:
                if mylist[j] > key:
                    mylist[j],mylist[j+1] = mylist[j+1],mylist[j]
                    key = mylist[j]
                    j -= 1
                else:
                    break
        print (mylist)
    
    insert_sort([88,25,93,54,17,9])
    

      

     选择排序

    算法:设置min=x[1],比较min和每1个元素,找到最小值后,交换min和该值,比较冒泡排序,找到最小值的索引,只交换1次。

    def selectSort(mylist):
        for i in range(len(mylist)):
            min = i
            for j in range(i+1,len(mylist)):
                if mylist[min] > mylist[j]:
                    min = j
            mylist[i],mylist[min] = mylist[min],mylist[i]
    
        print (mylist)
    
    selectSort([33,4,76,21,9,1])
    

    快速排序

     选择一个基数flag,其他每一个元素都和基数比较,小于基数的放基数左边,大于基数的放基数右边,然后再对基数左、右边序列做递归排序,直到序列只有1个数。

    定义flag为x[n-1],i=-1,j=0;循环:比较x[j]与flag,当x[j]>flag,j+1,pass;当x[j]<flag,i=i+1,j+1,交换x[i]和x[j]。

    def quickSort(mylist):
        def pathSort(lista,startIndex,endIndex):
            flag = lista[endIndex]
            i = startIndex - 1
            for j in range(startIndex,endIndex):
                if lista[j] > flag:
                    pass
                else:
                    i += 1
                    lista[i],lista[j] = lista[j],lista[i]
            lista[i+1],lista[endIndex] = lista[endIndex],lista[i+1]
            return i+1
    
        def qSort(listb,startIndex,endIndex):
            if startIndex >= endIndex:
                return
            middle = pathSort(listb,startIndex,endIndex)
            qSort(listb,startIndex,middle-1)
            qSort(listb,middle+1,endIndex)
            return  listb
    
        print (qSort(mylist,0,len(mylist)-1))
    
    quickSort([33,1,56,3,22,7,82])
    

    二叉树

    (1)基础知识
    【二叉树】:二叉树是一棵特殊的树,二叉树每个节点最多有两个孩子结点,分别称为左孩子和右孩子。
    【满二叉树】:高度为N的满二叉树有2^N- 1个节点的二叉树。
    【完全二叉树】: 若设二叉树的深度为h,除第h 层外,其它各层(1~h-1) 的结点数都达到最大个数,第h 层所有的结点都连续集中在最左边,这就是完全二叉树。

     先序遍历二叉树:根节点-左子树-右子树;

    时间复杂度

    排序法

    最差时间分析 平均时间复杂度 稳定度 空间复杂度
    冒泡排序 O(n2) O(n2) 稳定 O(1)
    快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
    选择排序 O(n2) O(n2) 稳定 O(1)
    二叉树排序 O(n2) O(n*log2n) 不一顶 O(n)

    插入排序

    O(n2) O(n2) 稳定 O(1)
    堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
    希尔排序 O O 不稳定 O(1)
  • 相关阅读:
    Android 70道面试题汇总不再愁面试
    TOMCAT用Https替换Http的方法
    Struts2+Spring3+Hibernate3配置全过程
    javac 无效标签
    hibernate
    数据库命令行启动
    Tomcat检测程序
    SQL
    Unsupported major.minor version 49.0的错误解决
    ImportError: No module named pysqlite2
  • 原文地址:https://www.cnblogs.com/wanwanmom/p/9622627.html
Copyright © 2011-2022 走看看