python——快速排序实现

快速排序(quick sort)是一种分治排序算法。

快速排序的思路为:

1、选取一个划分元素(partition element,有时又称为pivot);

2、重排列表将其划分为三个部分:left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上;

3、分别对left和right两个部分进行递归排序。

代码实现如下:

#! /usr/bin/python
# -*- coding:UTF-8 -*-


def excute_quicksort(num_list):
    qsort(num_list, 0, len(num_list) - 1)
    return num_list

def qsort(num_list, first, last):
    if first < last:
        split = quicksort(num_list, first, last)
        qsort(num_list, first, split - 1)
        qsort(num_list, split + 1, last)


def quicksort(num_list, first, last):
    pivot = num_list[first]
    leftmark = first + 1
    rightmark = last
    while True:
        while pivot >= num_list[leftmark]:
            if leftmark == rightmark:
                break
            leftmark += 1
        while pivot < num_list[rightmark]:
            rightmark -= 1
        if leftmark < rightmark:
            num_list[leftmark], num_list[rightmark] = num_list[rightmark], num_list[leftmark]
        else:
            break
    num_list[first], num_list[rightmark] = num_list[rightmark], num_list[first]
    return rightmark

def main():
    num_list = [5, 7, 1, 3, 6]
    print 'before sort:', num_list
    print 'after sort', excute_quicksort(num_list)

if __name__ == "__main__":
    main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值