python經典排序之快排

快速排序是一種分治排序算法。這種算法首先會選取一個劃分元素,而後重排列表,將一個列表分爲小於部分,劃分區域部分,大於部分,而後分別對大於和小於部分進行遞歸排序,劃分元素會直接影響到快排的算法效率,一般咱們會選擇列表的第一個元素,中間元素,最後一個元素做爲劃分元素。python

 快排的有點是原位排序,平均時間複雜度位O(n log n),最壞的狀況下時間複雜度位O(n**2)。算法

實現代碼:ui

#!/usr/bin/python3htm

#! -*- 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)it

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)io

執行結果爲排序先後的比對。ast

相關文章
相關標籤/搜索