排序算法—快速排序算法分析与实现(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
运行结果:
今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。
思想
快速排序采用的思想是分治思想。
快速排序是找出一个元素(理论上可以随便找一个)作为基准(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]
相关文章推荐
- ArcGIS使用python进行三规合一用地调整
- 每天学点Python之zip
- Python标准库07 信号 (signal包,部分os包)
- python 1.1 数据类型和变量
- python的scipy库的安装
- python学习第一天
- 我的Python成长之路---第一天---Python基础(6)---2015年12月26日(雾霾)
- python定时程序(每隔一段时间执行指定函数)
- (转)windows系统下Python环境的搭建
- (转)python requests的安装与简单运用
- (转)win7 64 安装mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h': No such file or directory
- [python]创建文本文件,并读取
- [Python]从安卓手机获取屏幕截图
- python 内存数据库与远程服务
- python 内存数据库与远程服务
- 3. Longest Substring Without Repeating Characters Leetcode Python New season for 2016
- python sklearn环境配置
- [python]代码中包含中文,提示:SyntaxError: Non-ASCII character '\xcd'
- Python 之模块导入
- python BDD&TDD