冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。以此类推,直至第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语言版》,  严蔚敏,吴伟民编著,  清华大学出版社

快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)的更多相关文章

  1. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  2. java排序算法之冒泡排序(Bubble Sort)

    java排序算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数 ...

  3. 快速排序算法回顾 (Python实现)

    #这个也是快速排序-------------------------------------------------- def qsort(list): if list==[]: return [] ...

  4. 【排序算法】冒泡排序(Bubble Sort)

    0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2)  次交 ...

  5. 用js实现算法:冒泡排序、插入排序和快速排序

    一.冒泡排序 function bubbleSort(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length-i-1;j ...

  6. c#经典算法之冒泡排序(Bubble Sort)

    转载于:https://www.cnblogs.com/shen-hua/p/5422676.html 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面, ...

  7. 分享知识-快乐自己:Java中的经典算法之冒泡排序(Bubble Sort)

    原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...

  8. 基础算法之冒泡排序Bubble Sort

    原理 将相邻的数据两两进行比较,按照从小到大或者从大到小的顺序进行位置交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后从头开始再次进行两两比较交换,直到倒数第二位时结束.按照此规则,若干 ...

  9. 排序算法—快速排序(Quick Sort)

    快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. ...

随机推荐

  1. 屏幕适配基础——了解:ppi、dpi、px、sp、dp

    做android开发绕不开的几个名词:ppi.dpi.px.sp.dp.那么它们的定义.区别和联系都是什么呢?这篇博客系统的做一个概述和总结. 1.基本概念 px:pixel,像素,电子屏幕上组成一幅 ...

  2. ThreadLocal笔记

    1.ThreadLocal的作用是什么?        ThreadLocal是一个泛型类,将保存在其中的值与当前的线程关联起来,这样每个线程看到的值对于其他线程来说都是不可见的,这个技术被称为线程封 ...

  3. 阿里宣布Atlas正式开源:带你重返App开发的田园时代

    继Weex之后,阿里在移动技术领域又有开源大动作. 3月13日,手机淘宝安卓客户端容器化框架Atlas正式宣布开源(https://github.com/alibaba/atlas ).Atlas由阿 ...

  4. TuSDK 简易使用方法 持有图片对象方式

    TuSDK 为涂图照相应用的SDK,打包后文件大小约为5M,缺点为包比较大,且图片清晰度较差一些,优点为直接可以引用滤镜贴纸,方便易用.   使用方法如下:    1.AppDelegate.m 中加 ...

  5. Struts2框架(8)---Struts2的输入校验

    Struts2的输入校验 在我们项目实际开发中在数据校验时,分为两种,一种是前端校验,一种是服务器校验: 客户端校验:主要是通过jsp写js脚本,它的优点很明显,就是输入错误的话提醒比较及时,能够减轻 ...

  6. 1640: [Usaco2007 Nov]Best Cow Line 队列变换

    1640: [Usaco2007 Nov]Best Cow Line 队列变换 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 543  Solved: 2 ...

  7. 文件File

    前面的话 不能直接访问用户计算机中的文件,一直都是Web应用开发中的一大障碍.2000年以前,处理文件的唯一方式就是在表单中加入<input type="file">字 ...

  8. WPF 动态生成DataGrid及动态绑定解决方案

    一.场景 有过WPF项目经验的朋友可能都知道,如果一个DataGrid要绑定静态的数据是非常的简单的(所谓静态是指绑定的数据源的类型是静态的),如下图所示,想要显示产品数据,只需绑定到一个产品列表即可 ...

  9. android:layout_gravity和android:gravity属性的区别1

    一.介绍: gravity的中文意思就是"重心",就是表示view横向和纵向的停靠位置 (1).android:gravity:是对view控件本身来说的,是用来设置view本身的 ...

  10. ECMASCRIPT5新特性(转载)

    Function 1: Object.create 这是一个很重要的改动,现在我们终于可以得到一个原型链干净的对象了.以前要创建一个类 function Cat(name) { this.name   ...