快速排序的python實現

2021-09-12 22:54:24 字數 2198 閱讀 5846

執行過程中,i 之前(含)的元素都比 a[r] 小,之後的比 a[r] 大。即 p ~ i 的元素比 a[r] 小,其後a[i+1] ~ a[j-1] 的元素比a[r]大。最後,交換a[i+1]與a[r]。

def quicksort(a, p, r):

if p < r:

q = partition(a, p, r)

quicksort(a, p, q-1)

quicksort(a, q+1, r)

def partition(a, p, r):

x = a[r]

i = p-1

for j in range(p, r):

if a[j] <= x:

i += 1

a[i], a[j] = a[j], a[i]

a[i+1], a[r] = a[r], a[i+1]

return i+1

def main():

a = [2, 8, 7, 1, 3, 5, 6, 4]

quicksort(a, 0, len(a)-1)

print(a)

if __name__=='__main__':

main()

import numpy as np

import time

def randomizedquicksort(a, p, r):

if p < r:

q = randomizedpartition(a, p, r)

randomizedquicksort(a, p, q-1)

randomizedquicksort(a, q+1, r)

def partition(a, p, r):

x = a[r]

i = p-1

for j in range(p, r):

if a[j] <= x:

i += 1

a[i], a[j] = a[j], a[i]

a[i+1], a[r] = a[r], a[i+1]

return i+1

def randomizedpartition(a, p, r):

import random

i = random.randint(p, r) # 隨機選取乙個元素作為主元

a[i], a[r] = a[r], a[i]

return partition(a, p, r)

def main():

a = np.random.randint(low=0, high=1000, size=1000) # 隨機生成1000個0到1000之間的整數並存到列表中

a = list(a)

before = time.time()

randomizedquicksort(a, 0, len(a)-1)

after = time.time()

operation_time = after - before # 計算執行時間

# 快速排序時間複雜度為o(n*logn)

if __name__=='__main__':

main()

結果如下:

from randomized_quicksort import randomizedpartition

def randomizedselect(a, p, r, i):

if p == r:

return a[p]

q = randomizedpartition(a, p, r) # 將陣列劃分為兩個子陣列a[p..q-1]和a[q+1..r]

k = q-p+1 # 計算子陣列a[p..q]內的元素個數k

if i == k:

return a[q]

elif i < k:

return randomizedselect(a, p, q-1, i)

else:

return randomizedselect(a, q+1, r, i-k)

def main():

a = [2, 8, 7, 1, 3, 5, 6, 4]

print(randomizedselect(a, 0, len(a)-1, 4))

if __name__=='__main__':

main()

輸出為第4小的數:4

快速排序的實現(python)

usr bin env python3 coding utf 8 import random 快速排序基礎 defpartition a,p,r x a r i p 1 j p while j r if a j x i 1 temp a i a i a j a j temp j 1 i 1 temp...

python 快速排序的實現

快速排序 quicksort 是對氣泡排序的一種改進。快速排序演算法通過多次比較和交換來實現排序,其排序流程如下 def quick sort origin items,comp lambda x,y x y items origin items quick sort items,0,len ite...

快速排序的Python實現

任意選乙個資料作為基準資料,然後將所有比它小的數都放到它的左邊,所有比它大的數都放到它的右邊 這裡以乙個列表作為例子 45,34,12,56,87,77,47,23 首先選擇45為基準資料 比45小的有 34,12,23 比45大的有 87,77,47,56 所以第一次排序就是 34,12,23,4...