快速排序的python实现

教官说:“第一个同学出列,其他人以他为中心,比他矮的站在他左边,比他高的站在他右边”

这就是快速排序第一轮排序的思路。

该同学左右又可以分为两个初始的队伍,再次执行教官说的话,这就是递归的思想。

时间复杂度:平均-----O(nlog2n)

最坏------O(n²)

空间复杂度:O(log2n)

 

下面是代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 快速排序的实现

L = [90,89,78,67,56,45,34,23,12,0]

# 这里实现第一轮排序,不妨称第一个元素为锚,
# i,j分别指向待排序序列的第一和最后一个元素,
# j与锚比较,若大于锚则左移,直到小于锚的元素停下,与i指向元素交换,i后移
# 接着,i与锚比较,若小于则右移,直到大于锚的元素停下,与j指向的元素交换,j前移
# i,j交替移动,i==j时,锚temp到达最终位置
def first_sort(numbers,i,j):
    temp = numbers[i]
    while i!=j:
        while i<j and numbers[j]>temp:
            j = j - 1
        if i<j:
            numbers[i] = numbers[j]
            i = i + 1
        while i<j and numbers[i]<temp:
            i = i + 1
        if i<j:
            numbers[j] = numbers[i]
            j = j - 1
        numbers[i] = temp
        return i
        
def quick_sort(numbers,i,j):
    if i<j:
        middle = first_sort(numbers,i,j)
        quick_sort(numbers,i,middle-1)
        quick_sort(numbers,middle+1,j)

if __name__=='__main__':
    quick_sort(L,0,len(L)-1)
    print L



你可能感兴趣的:(排序,python)