您的位置:首页 > 编程语言 > Python开发

python经典排序之快排

2018-05-10 20:59 169 查看

快速排序是一种分治排序算法。这种算法首先会选取一个划分元素,然后重排列表,将一个列表分为小于部分,划分区域部分,大于部分,然后分别对大于和小于部分进行递归排序,划分元素会直接影响到快排的算法效率,通常我们会选择列表的第一个元素,中间元素,最后一个元素作为划分元素。

 快排的有点是原位排序,平均时间复杂度位O(n log n),最坏的情况下时间复杂度位O(n**2)。

实现代码:

#!/usr/bin/python3

#! -*- coding:UTF-8 -*-

def quicksort(L):
    qsort(L, 0, len(L)-1)

def qsort(L, first, last):
    if first < last:
        split = partition(L, first, last)
        qsort(L, first, split-1)
        qsort(L, split+1, last)

def partition(L, first, last):
    pivot = L[first]
    leftmark = first + 1
    rightmark = last
    while True:
        while L[leftmark] <= pivot:
            if leftmark == rightmark:
                break
            leftmark += 1
        while L[rightmark] > pivot:
            rightmark -= 1
        if leftmark < rightmark:
            L[leftmark],L[rightmark] = L[rightmark], L[leftmark]
        else:
            break
    L[first], L[rightmark] = L[rightmark], L[first]
    return rightmark
num_list = [5, 8, -10, 3, 9, 15, -5, 13]
print(num_list)
quicksort(num_list)
print(num_list)

执行结果为排序前后的比对。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序