zoukankan      html  css  js  c++  java
  • 排序

    http://www.blogjava.net/todayx-org/archive/2012/01/08/368091.html

    http://blog.csdn.net/wl044090432/article/details/54668215

    一 冒泡排序

    // 分类 -------------- 内部比较排序
    // 数据结构 ---------- 数组
    // 最差时间复杂度 ---- O(n^2)
    // 最优时间复杂度 ---- 如果能在内部循环第一次运行时,使用一个旗标来表示有无需要交换的可能,可以把最优时间复杂度降低到O(n)
    // 平均时间复杂度 ---- O(n^2)
    // 所需辅助空间 ------ O(1)
    // 稳定性 ------------ 稳定
    import random
    
    from app01.decorator import *
    @cal_time
    def bubble(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]
        print(li)
    
    li = list(range(10000))
    random.shuffle(li)
    bubble(li)

      decorator.py  :专门计算时间的装饰器

    import time
    def cal_time(func):
        def inner(*args,**kwargs):
            t1=time.time()
            res=func(*args,**kwargs)
            print('耗时:',time.time()-t1)
            return res
        return inner

    二 插入排序

    import random
    from app01.decorator import *
    li=list(range(1000))
    random.shuffle(li)
    
    @cal_time
    def insert_sort(li):
        for i in range(1,len(li)):   # i 表示无序区第一个数
            tmp = li[i]    # 摸到的牌
            j = i - 1  # j 指向有序区最后位置
            while li[j] > tmp and j >= 0:  #循环终止条件: 1. li[j] <= tmp; 2. j == -1
                li[j+1] = li[j]
                j -= 1
    
            li[j+1] = tmp
        print(li)
    insert_sort(li)

    三  选择排序

    import  random
    from app01.decorator import *
    @cal_time
    def select_sort(li):
        for i in range(len(li)):  # i 表示趟数,也表示无序区开始的位置
            min_loc=i             # 最小数的位置
            for j in range(i+1,len(li)):
                if li[j]<li[min_loc]:
                    min_loc=j
            li[min_loc],li[i]=li[i],li[min_loc]
        print(li)
    
    li=list(range(1000))
    random.shuffle(li)
    select_sort(li)

    四  快速排序

    http://blog.csdn.net/morewindows/article/details/6684558

    import random
    from app01.decorator import *
    
    
    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)
    
    
    def partition(li,left,right):
        tmp=li[left]
        while left<right:
            while left<right and li[right] >=tmp:
                right-=1
            li[left]=li[right]
            while left<right and li[left] <=tmp:
                left+=1
            li[right]=li[left]
        li[right]=tmp
        return right
    
    @cal_time
    def quick_sort(li,left,right):
        _quick_sort(li,left,right)
    
    
    li=list(range(100000))
    random.shuffle(li)
    quick_sort(li,0,len(li)-1)
  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/654321cc/p/8395003.html
Copyright © 2011-2022 走看看