zoukankan      html  css  js  c++  java
  • 各种排序算法

    import sys
    
    sys.setrecursionlimit(10000000)###设置最大递归深度
    ## 冒泡算法
    # 时间复杂度:O(n^2) 空间复杂度:O(1)
    def bubble_sort(li):
        for i in range(len(li)-1): # i = 0
            flag = False
            for j in range(len(li)-1-i): # j = 6
                if li[j] > li[j+1]: # li[j] = li[2] = 3 > li[j+1]=li[3]=4
                    li[j], li[j+1] = li[j+1], li[j]
                    flag = True
            if not flag:
                return
    
    ### 选择排序
    ### 时间复杂度: O(n^2) 空间复杂度: O(1)
    def select_sort(li):
        for i in range(len(li)-1):
            minLoc = i
            for j in range(i+1, len(li)):
                if li[minLoc] > li[j]:
                    li[minLoc], li[j] = li[j], li[minLoc]
    
    ### 插入排序
    ### 时间复杂度: O(n^2) 空间复杂度: O(1)
    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):  ### O(n)
        tmp = li[left]
        while left < right:
            while left < right and li[left] <= tmp:
                left = left + 1
            li[right] = li[left]
    
            while left < right and  li[right] >= tmp:
                right = right - 1
            li[left] = li[right]
    
    
    
        li[left] = tmp
        return left
    
    def quick_sort(li, left, right):
        if left < right:
            mid = partition(li, left, right) ### O(n)
            quick_sort(li, left, mid-1)  ### O(logn)
            quick_sort(li, mid+1, right) ### O(logn)
            ### O(logn)
    
    import random, time
    
    li = [random.randint(1,1000) for i in range(100000)]
    # print(li)
    start = time.time()
    quick_sort(li, 0, len(li)-1)
    print('quick_sort: ', time.time() - start)
    
    
    li = [random.randint(1,1000) for i in range(100000)]
    start = time.time()
    bubble_sort(li)
    print('bubble_sort: ', time.time() - start)
    
    li = [random.randint(1,1000) for i in range(100000)]
    start = time.time()
    select_sort(li)
    print('select_sort: ', time.time() - start)
    
    li = [random.randint(1,1000) for i in range(100000)]
    start = time.time()
    insert_sort(li)
    print('insert_sort: ', time.time() - start)
    
    
    
    
    # print(li)
  • 相关阅读:
    4.变量与运算符
    2.python的基本数据类型
    bzoj 2337: [HNOI2011]XOR和路径
    bzoj 2109: [Noi2010]Plane 航空管制
    bzoj 1566: [NOI2009]管道取珠
    bzoj 3439: Kpm的MC密码
    bzoj 2957: 楼房重建
    十、mysql之索引原理与慢查询优化
    九、MySQL 5.7.9版本sql_mode=only_full_group_by问题
    八、多表查询
  • 原文地址:https://www.cnblogs.com/tangda/p/11116034.html
Copyright © 2011-2022 走看看