Python实现快排

没事的时候恶心一下,学习Python基本语法。

# -*- coding: cp936 -*-
#Python在默认情况下,最大递归深度为1000
#(理论值,其实真实情况下,只有995左右,各个系统这个值的大小也不同)。
#import sys
#sys.setrecursionlimit(99999)

#Python快排神优雅实现
#def qsort(L):
#   if not L: return []
#   return qsort([x for x in L[1:] if x< L[0]]) + L[0:1] + \
#          qsort([x for x in L[1:] if x>=L[0]])

import sys
import random

count = 0

def godlikeQsort(data):
    if not data: return []
    return godlikeQsort([x for x in data[1:] if x < data[0]]) + \
           data[0:1] + \
           godlikeQsort([x for x in data[1:] if x >= data[0]])

def qsort(data, begin, end):
    if begin < end:
        #使用全局变量方法,因为出现修改
        #global count
        #print "Recursion: ", count
        #count += 1
        mid = randomPartition(data, begin, end)
        qsort(data, begin, mid - 1)
        qsort(data, mid + 1, end)

def randomPartition(data, begin, end):
    randomNum = random.randint(begin, end)
    data[randomNum], data[end] = data[end], data[randomNum]
    return partition(data, begin, end)

def partition(data, begin, end):
    mid = begin - 1
    standard = data[end]
    for num in range(begin, end):
        if data[num] <= standard:
            mid += 1
            data[num], data[mid] = data[mid], data[num]
    data[mid + 1], data[end] = data[end], data[mid + 1]
    return mid + 1

if __name__ == "__main__":
    array = []
    size = int(raw_input ("Size of the array: "))
    for i in range(0, size):
        #用str强制类型转换
        array.append(int(raw_input ("Please input the No." + str(i + 1) +" number:")))
    print "Original array:\t\t", array
    qsort(array, 0, len(array) - 1)
    #print godlikeQsort(array)
    print "Ascending array:\t", array


你可能感兴趣的:(Python实现快排)