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

最新文章

  1. hostingEnvironment与宿主环境
  2. out参数,ref参数,params参数数组
  3. C Primer Plus(第五版)2
  4. php随意笔记
  5. 详解Swing中JTree组件的功能
  6. Leetcode题解(22)
  7. angular2 学习笔记 の 移动端开发 ( 手势 )
  8. 看AppCan移动管理平台如何助力企业移动化
  9. deepfake-faceswap第一篇论文-2016摘要
  10. IT真的是万能的吗?
  11. HDU 1796 How many integers can you find 【容斥】
  12. MVC学习(三)Code-First Demo
  13. c#中将字符串转换成带2位小数的浮点数
  14. Hibernate与MyBatis的对比
  15. 软工作业No.8 第六周 Alpha阶段项目复审
  16. Almost Union-Find 并查集(脱离原来的树)
  17. mongodb与关系型数据库优缺点比较
  18. C++模式学习------策略模式
  19. Pandas 高级应用 数据分析
  20. Boost在Linux 64 下的编译

热门文章

  1. WEB标准了解
  2. progID
  3. Python拉勾爬虫——以深圳地区数据分析师为例
  4. 【Java每日一题】20170308
  5. Linux使用小笔记&lt;安装篇&gt;
  6. H5微信播放全屏问题
  7. ajax三级联动下拉菜单
  8. 1578: [Usaco2009 Feb]Stock Market 股票市场
  9. STM32F103RC进入串口3接收中断产生HardFault_Hander问题解决!
  10. 用ListView实现对数据库的内容显示