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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)相关的知识,希望对你有一定的参考价值。

冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字。以此类推,直至第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
            j+=1
        i-=1

#快速排序-------------------------------------------------------
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)

#---------------------------------------------------------------

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实现)的主要内容,如果未能解决你的问题,请参考以下文章

什么是计数排序?

JavaScript Python JavaGo算法系列之快速排序篇

JavaScript Python JavaGo算法系列之快速排序篇

JavaScript Python JavaGo算法系列之快速排序篇

JavaScript Python JavaGo算法系列之快速排序篇

写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组。