zoukankan      html  css  js  c++  java
  • 时间复杂度和空间复杂度,排序算法

    一。时间复杂度和空间复杂度

      时间复杂度是,衡量算法是否优秀的一个标准,其概念是大概一个算法运行需要的时间。

      空间复杂度是一个算法在运行的时候,所消耗的空间。

      O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^2logn) < O(n^3)

      其他:

      O(n!),O(2^n),O(n^n)

    二。冒泡排序

      冒泡排序的时间复杂度为 O(n^2)

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

    三。选择排序

      选择排序的时间复杂度为O(n^2)

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

    四。插入排序

      插入排序的时间复杂度为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

      

    五。快速排序

      快速排序的时间复杂度为O(nlogn)

    def partition(li, left, right):
        tmp = li[left]
        while left < right:
            while left < right and li[right] >= tmp:
                right = right - 1
            li[left] = li[right]
            while left < right and li[left] <= tmp:
                left = left + 1
            li[right] = li[left]
        li[left] = tmp
        return left
    
    
    def quick_sort(li, left, right):
        if left < right:
            mid = partition(li, left, right)
            quick_sort(li, left, mid-1)
            quick_sort(li, mid+1, right)

      

     排序视图网站

    https://visualgo.net/zh/sorting

  • 相关阅读:
    洛谷P2640 神秘磁石(欧拉筛法)
    并查集
    高精度算法
    手写堆
    对拍的使用
    unity4.6学习Ugui中文文档-------参考-UGUI Rect Transform
    使用c#访问脚本里变量的方法
    Unity3d 脚本相互调用
    set_union的几个例子[转]
    C++ 关键字——friend
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/12092303.html
Copyright © 2011-2022 走看看