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


發佈了121 篇原創文章 · 獲贊 9 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章