快速排序算法

1、基本思路

快速排序算法的基本思想总结如下:

(1)先从数列中取出一个数作为基准数。

(2)以这个数为基准,将比其大的数全都放到他的右边,小于或等于它的数全放到他的左边

(3)再对左右区间重复(1)(2)步的操作,直到各个区间中只有一个数。

简单形象地总结起来就是: 挖坑填数 + 分治法

 

2、简单示例

下面,我们给出快排算法的一个简单示例。数组如下:

0123456789
7265788604283734885

 

 

我们取区间的第一个数作为基准数,最初设置 i = 0, j = 9; temp = a[i] = 72,相当于在a[0]位置挖了一个坑。

然后从j开始(基准数为最左边,则要从最右边开始查找)向前查找,找到一个小于等于temp的数。当j=8时,符合条件。

因此,把a[8]填入到a[0]那个坑中,然后将a[8]空出来。

0123456789
486578860428373 85

 

 

 

之后i向前查找,找到比a[0]大的数a[3],将a[3]填入到a[8]中,又将a[3]空出来。

0123456789
48657 604283738885

 

 

 

一直重复上述操作,直到i=j=5时,停止,并且将temp填入到a[5]中。

0123456789
4865742607283738885

 

 

 

3、代码(Python)

def quick_sort(data, left, right):
    if left < right:
        i, j = left, right
        temp = data[left]
        while(i<j):
            while(i<j and data[j] >= temp):
                j--
        data[i] = data[j]
        while(i<j and data[i] <= temp):
            i++
        data[j] = data[i]
        data[i] = temp
        quick_sort(data, left, i-1)
        quick_sort(data, i+1, right)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值