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

时间:2023-01-24 14:48:31

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

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

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

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

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

用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中的经典算法之冒泡排序&lpar;Bubble Sort&rpar;

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

  2. java排序算法之冒泡排序&lpar;Bubble Sort&rpar;

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

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

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

  4. 【排序算法】冒泡排序&lpar;Bubble Sort&rpar;

    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&num;经典算法之冒泡排序&lpar;Bubble Sort&rpar;

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

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

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

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

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

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

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

随机推荐

  1. tomcat域名访问配置

    模拟线上环境,在本地以域名访问系统思路 1.首先在hosts文件将域名映射为本地IP 2.假如服务器80端口已被占用,可以用nginx转发,在nginx/vhosts/abc.com加入如下配置 se ...

  2. linux命令:whereis

    1.命令介绍: whereis用来查找二进制文件,源代码文件和帮助说明文件,whereis是在系统的数据库文件中查找,所以速度非常快,但是系统的文件数据库不是实时更新的,默认一个星期更新一次. 2.命 ...

  3. 数据词典与ABAP类型映射

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. Android中弹出对话框,AlertDialog关键代码

    写在这里便于以后查看. Android中弹出对话框的关键代码: btn01.setOnClickListener(new OnClickListener() { @Override public vo ...

  5. 敏捷测试(3)--基于story的敏捷基础知识

    基于story的敏捷基础知识----story编写 为什么使用Story? 软件行业40年多来,需求分析技术已经很成熟了,但是MRD驱动的过程不堪重负.因为往往MRD编写会占去很多时间,MRD评审又会 ...

  6. Redis操作1

    本文章内容节选自<PHP MVC开发实战>一书第16.4.2章节. 一.概述 Redis是一个NoSQL数据库,由于其数据类型的差异,所以要在MVC框架中实现CURD操作,比较繁锁.事实上 ...

  7. 个渣渣C语言之数组

    ---恢复内容开始--- 学c语言就知道数组.指针在c中有着特殊的地位.而且是必须掌握的一项知识,学会它会让你受益无穷. 一.数组 1.数组:室友一系列相同元素构成的.它连续的存储在内存中. 2.数组 ...

  8. Git 基础 - 远程仓库的使用

    远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库.远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写.同他人协作开发某个项目时,需要管 ...

  9. Phython笔记初识

    Phython笔记初识   Python 1898 第一版本 1991 荷兰人 Guido  协议 Gpl                     动态语音类型  

  10. Android App data write as file data with synchronous Demo

    package com.android.utils; import java.io.File; import java.io.IOException; import java.io.RandomAcc ...