#这个也是快速排序--------------------------------------------------
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. [转]Docker中的镜像

    引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的M ...

  2. Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvcCompc dtS420 \s2018 s4f doc homepc \s2018 s4 doc compc dtS44\(5 封私信 _ 44 条消息)WebSocket 有没有可能取代 AJAX

    Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvcCo ...

  3. 行为链分析zipkin

    行为链分析zipkin - 跑zipkin python例子 https://github.com/openzipkin/pyramid_zipkin-example # get the latest ...

  4. 基于Kafka的生产者消费者消息处理本地调试

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/68174111冷血之心的博客) Kafka下载地址:http://d ...

  5. 如何保持github的fork于主干同步

    step1: https://help.github.com/articles/configuring-a-remote-for-a-fork/ step2: https://help.github. ...

  6. vue2.0引入现有css文件

    1.在vue文件中的<style>内填写需要引用的文件 如: @import "./css/indexTest.css";

  7. 【转】使用minizip解压缩多个文件(基于zlib)

    原帖子:使用minizip解压缩多个文件(基于zlib) 写作目的:之前在网上看到很多人在寻找可以解压缩多个文件的程序,其中有尝试zlib的,使用zlib的源码可以生成后缀为点gz的压缩文件,但是一次 ...

  8. layer 关闭当前弹出层

    关闭当前框的弹出层 layer.close(layer.index); 刷新父层 parent.location.reload(); // 父页面刷新 关闭iframe 弹出的全屏层 var inde ...

  9. windows上RSA密钥生成和使用

    一,下载安装windows平台openssl密钥生成工具,执行安装目录bin下的"openssl.exe",执行后弹出命令窗口如下 运行 二,生成私钥 输入"genrsa ...

  10. java递归算法提前返回值带出

    /** * */ package testJava.java.foreach; import java.util.ArrayList; import java.util.LinkedList; imp ...