zoukankan      html  css  js  c++  java
  • Python天天美味(30) python数据结构与算法之快速排序

    快速排序的原理是将取出第一个数,将整个数组分为两波,一拨都大于这个数,另一波都小于这个数,然后递归用同样的方法处理第一波数字和第二波数字。都说是“快速排序”,效率肯定比其他的一般排序算法高,下面我们就来验证一把,比较一下所谓的“快速排序”和“冒泡排序”的性能差异。

    1. 快速排序

    def quicksort(data, low = 0, high = None):
        if high == None:
            high = len(data) - 1
        if low < high:
            s, i, j = data[low], low, high
            while i < j:
                while i < j and data[j] >= s:
                    j = j - 1
                if i < j:
                    data[i] = data[j]
                    i = i + 1
                while i < j and data[i] <= s:
                    i = i + 1
                if i < j:
                    data[j] = data[i]
                    j = j - 1
            data[i] = s
            quicksort(data, low, i - 1)
            quicksort(data, i + 1, high)

    2. 冒泡排序

    def bubblesort(data):
        for i in range(len(data) - 1, 0, -1):
            for j in range(0, i):
                if data[j] > data[j + 1]:
                    data[j], data[j + 1] = data[j + 1], data[j]

    3. 性能比较

    上面看来,冒泡排序只需要5行,够简洁的,但性能咋样呢?来比较一下吧:

    import random
    import datetime
    import copy

    def sort_perfmon(sortfunc, data):
        sort_data = copy.deepcopy(data)
        t1 = datetime.datetime.now()
        sortfunc(sort_data)
        t2 = datetime.datetime.now()
        print sortfunc.__name__, t2 - t1
        #print sort_data

    data = [random.randint(0, 65536) for i in range(2000)]
    #print data
    sort_perfmon(quicksort, data)
    sort_perfmon(bubblesort, data)

    4. 结果

    通过对随机的2000个数字进行排序,下面的结果可非常容易的看出,快速排序的优势是非常大的。

    quicksort 0:00:00.062000
    bubblesort 0:00:03.563000

    5. 代码下载

    https://files.cnblogs.com/coderzh/Code/sorttest.rar 

    Python 天天美味系列(总)

    Python 天天美味(28) - urlopen    

    Python 天天美味(29) - 调用VC++的动态链接库(DLL) 

    Python 天天美味(30) - python数据结构与算法之快速排序 

    Python 天天美味(31) - python数据结构与算法之插入排序 

    Python 天天美味(32) - python数据结构与算法之堆排序 

    ...
  • 相关阅读:
    第 4 章 容器
    第 4 章 容器
    第 4 章 容器
    第 4 章 容器
    第 3 章 镜像
    第 3 章 镜像
    seekbar拖动条控件
    OnClick,onLongClick,OnTouch调用机制
    在TextView文本中实现activity跳转
    TextView显示html图片方法
  • 原文地址:https://www.cnblogs.com/coderzh/p/1294947.html
Copyright © 2011-2022 走看看