您的位置:首页 > 编程语言 > Python开发

排序算法—快速排序算法分析与实现(Python)

2015-12-29 14:27 686 查看
December 29, 2015 2:09 PM

今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。

思想

快速排序采用的思想是分治思想。

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

一、假设我们给一个int数组进行排序,数组中数字初始序列为[3,6,5,9,7,1,8,2,4]



二、分析快速排序的原理前,我们先声明一些东西,首先设置一个临时变量用来存放随机取出数组中的一个数,一般我们取数组的第一个元素也就是说temp=a[0],同时设置两个游标分别指向数组第一个元素和最后一个元素



三、算法的基本运算步骤为:1、依次比较数组的后游标所指与temp的大小,如果temp

[code]#QuickSort.py
#王渊
#2015.12.23
#Email:wyxidian@gmail.com

from pylab import *

def QuickSort(data, start, end):
    oldStart = start
    oldEnd = end

    flag = True
    while(start < end):                         #从表的两端向中间扫描
        if flag:                                #枢轴值在子表前边
            if(data[start]<data[end]):
                end = end-1
            else:
                data[start],data[end] = data[end],data[start]
                start = start+1
                flag = False
        elif (~flag):                          #枢轴值在子表后边
            if(data[start]<data[end]):
                start = start+1
            else:
                data[start],data[end] = data[end],data[start]
                end = end-1
                flag = True

    if(oldStart != oldEnd):
        QuickSort(data, oldStart, start)        #对低子表递归排序
        QuickSort(data, start+1, oldEnd)        #对高子表递归排序

data = [48,1,16,62,73,88,24,59,99,0,35]
length = data.__len__()                         #获取数据长度
print("The original data is : ", data)
QuickSort(data, 0,length-1)
print("The result of sorted data is : ", data)


运行结果:

[code]The original data is :  [48  1 16 62 73 88 24 59 99  0 35]
The result of sorted data is :  [ 0  1 16 24 35 48 59 62 73 88 99]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: