#这个也是快速排序--------------------------------------------------
def qsort(list):
if list==[]:
return []
else:
smaller=[x for x in list[1:] if x<list[0]] #比list[0]小的部分
bigger=[x for x in list[1:] if x>=list[0]] #比list[0]大(或相等)的部分
return qsort(smaller)+[list[0]]+qsort(bigger) =============================

冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。上述过程称为第一趟冒泡排序,接着第二趟对前面n-1个关键字进行同样操作,……

快速排序是对冒泡排序的一种改进,通过一趟排序将记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,可分别对这两部分记录以递归的方法继续进行排序,以达到整个序列有序。

单趟Partition()函数过程请看下面动图:

用Python进行实现:

#coding=utf-8
import time a=[49,38,65,97,76,13,27,49]
b=[-1,49,38,65,97,76,13,27,49] #其中b[0]=-1这一位置是暂存单元,用于存放下面算法中的list[low] #冒泡排序-------------------------------------------------------
def BubbleSort(list):
for i in reversed(range(len(a))):
for j in range(0,len(a)-1):
if(list[j] > list[j+1]):
temp=list[j]
list[j]=list[j+1]
list[j+1]=temp #快速排序-------------------------------------------------------
def Partition(list,low,high):
pivotkey=list[low] #枢轴
list[0]=list[low]
while low<high: #从表的两端交替地向中间扫描
while(low<high and list[high]>=pivotkey):
high-=1
list[low]=list[high] #将比枢轴记录小的移到低端
while(low<high and list[low]<=pivotkey):
low+=1
list[high]=list[low] #将比枢轴记录大的移到高端
list[low]=list[0] #枢轴记录到位
return low #返回枢轴位置 def Qsort(list,low,high):
if low<high:
pivotloc=Partition(list,low,high); #将list一分为二
Qsort(list,low,pivotloc-1) #对低子表递归排序
Qsort(list,pivotloc+1,high) #对高子表递归排序 def QuickSort(list):
Qsort(list,1,len(list)-1)
#这个也是快速排序--------------------------------------------------
def qsort(list):
if list==[]:
return []
else:
smaller=[x for x in list[1:] if x<list[0]] #比list[0]小的部分
bigger=[x for x in list[1:] if x>=list[0]] #比list[0]大(或相等)的部分
return qsort(smaller)+[list[0]]+qsort(bigger) #--------------------------------------------------------------- start_time=time.time()
BubbleSort(a)
QuickSort(b)
use_time=time.time()-start_time
print 'Time used: '+str(use_time)
print a
print b[1:]

参考书目:《数据结构:C语言版》,  严蔚敏,吴伟民编著,  清华大学出版社

快速排序算法回顾 (Python实现)的更多相关文章

  1. 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)

    冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...

  2. 桶排序与快速排序算法结合-python实现

    #-*- coding: UTF-8 -*- import numpy as np from QuickSort import QuickSort def BucketSort(a, n): barr ...

  3. python实现快速排序算法

    快速排序算法又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, 排序n个项目要O(nlogn)次比较.在最坏状况下则需要O(n*2) ...

  4. $用python实现快速排序算法

    本文主要介绍用python实现基本的快速排序算法,体会一下python的快排代码可以写得多么简洁. 1. 三言两语概括算法核心思想 先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来 ...

  5. 使用Python实现的4种快速排序算法

    快速排序算法,总体来说就是选一个基准值,把小于基准值的分一拨,把大于基准值的分到另一拨,然后递归. 有区别的是,分区算法有差异,最直接的是,选个基准值,定义两个列表(小值分区less和大值分区grea ...

  6. 八大排序算法的 Python 实现

    转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...

  7. 机器学习算法与Python实践之(四)支持向量机(SVM)实现

    机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 zouxy09@qq.com http://blog.csdn.net/ ...

  8. 机器学习算法与Python实践之(三)支持向量机(SVM)进阶

    机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 zouxy09@qq.com http://blog.csdn.net/ ...

  9. 机器学习算法与Python实践之(二)支持向量机(SVM)初级

    机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 zouxy09@qq.com http://blog.csdn.net/ ...

随机推荐

  1. 【php】php5.0以上,instanceof 用法

    1.instanceof php官网:http://php.net/manual/zh/language.operators.type.php 2.instanceof 用于确定一个 PHP 变量是否 ...

  2. 关于APP,原生和H5开发技术的争论 APP开发技术选型判断依据

    关于APP,原生和H5开发技术的争论 App的开发技术,目前流行的两种方式,原生和Html5.原生分了安卓平台和ios平台(还有小众的黑莓.死去的塞班就不说了),H5就是Html5. 目前争论不休的问 ...

  3. css3 box-shadow 使用方法详解

    其用法为:  代码如下 复制代码 box-shadow: x-offset y-offset blur spread color inset; 上述六个参数含义依次是水平方向的偏移(正值向右偏移,负值 ...

  4. XAMARIN上运行IPHONE模拟器

    重装农药第32天!!! 今天弄XAMARIN运行IPHONE模拟器,前提是需要MAC 同时在开着,然后打开昨天 建立的HELLO WORLD项目,选择APP1.IOS,直接点右边的三角运行即可,他会自 ...

  5. hdoj:2071

    Max Num Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  6. 【ML入门系列】(一)训练集、测试集和验证集

    训练集.验证集和测试集这三个名词在机器学习领域极其常见,但很多人并不是特别清楚,尤其是后两个经常被人混用. 在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train ...

  7. 基数计数——HyperLogLog

    所谓的基数计数就是统计一组元素中不重复的元素的个数.如统计某个网站的UV,或者用户搜索网站的关键词数量:再如对一个网站分别统计了三天的UV,现在需要知道这三天的UV总量是多少,怎么融合多个统计值. 1 ...

  8. Sword libcurl回调函数相关知识

    libcurl响应回调函数说明   libcurl在默认情况下,回调里面会将数据分段的返回,不会一下子将发送端的数据全部塞到回调函数里面, 经过源码分析回调函数和curl_easy_perform是在 ...

  9. UNION ALL的用法

    " ?> -mapper.dtd" > <mapper namespace="com.j1.soa.resource.order.oracle.dao. ...

  10. 《Spring实战》学习笔记-第五章:构建Spring web应用

    之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...