幾種快速排序的耗時比較

2021-08-19 18:21:20 字數 2415 閱讀 2229

幾種快速排序的耗時比較

陣列長度=10^4

固定pivot(首)

隨機pivot

三數取中

三數取中+插排

五數取中

隨機數組

0.03429 s

0.04581 s

0.0415 s

公升序陣列

4.98177 s

0.03306 s

0.03784 s

降序陣列

4.96196 s

0.03328 s

0.0342 s

重複陣列

4.29686 s

4.69243 s

4.53609 s

本質:分治思想

特點:每經過一次快排,軸點(pivot)元素必然就位!

過程:每經過一次快排,樞軸元素將所處理區域劃分為「小元素」和「大元素」兩段,並通過遞迴不斷劃分,最終得到乙個排序的序列。

核心技巧:每一次的partition都比較平均。

1.如果每次劃分都將所處理的區域劃分為長度基本相等的兩段

$$\frac=1\rightarrow k=log_n$$

很顯然只需大約log n層劃分,就能使最底層的每個分段長度不超過1。而每一趟劃分的過程中,關鍵碼比較次數不超過物件長度。所以當前情況下,元素比較次數不超過:

$$o(nlogn)$$

2.最壞情況:每次劃分得到的兩段總有一段為空,總的比較次數是

$$o(n^2)$$

方法1. 固定樞軸:

created on sun apr  8 10:35:06 2018

@author: yzdeng

"""import numpy as np

import timeit

import sys

sys.setrecursionlimit(1000000)

#固定pivot(陣列首元素做pivot)

def quick_sort1(lst,l,r):

if l>=r:

return

i=lj=r

pivot=lst[i]

while i=pivot:

j-=1

if i

方法2. 隨機樞軸:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

created on sun apr 8 17:20:36 2018

@author: dengyuzhao

"""

from random import choice

import numpy as np

import timeit

import sys

sys.setrecursionlimit(1000000)

def quick_sort1(lst,l,r):

if l>=r:

return

a=np.arange(l,r+1)

p=choice(a)

i=l

j=r

pivot=lst[p]

lst[p]=lst[i]

while i=pivot:

j-=1

if ilst[i]=lst[j]

i+=1

while ii+=1

if ilst[j]=lst[i]

j-=1

lst[i]=pivot

quick_sort1(lst,l,i-1)

quick_sort1(lst,i+1,r)

return lst

#test:

a1=np.random.normal(100,100,(10000,))

b1=list(a1)

print(timeit.timer(lambda:quick_sort1(b1,0,9999)).timeit(1))

a2=np.arange(10000)

b2=list(a2)

print(timeit.timer(lambda:quick_sort1(b2,0,9999)).timeit(1))

a3=np.arange(10000,0,-1)

b3=list(a3)

print(timeit.timer(lambda:quick_sort1(b3,0,9999)).timeit(1))

a4=[2]*10000

print(timeit.timer(lambda:quick_sort1(a4,0,9999)).timeit(1))

幾種排序演算法的比較

1.分類 非線性時間比較類排序 通過比較來決定元素間的相對位置關係,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間比較類排序 不通過比較來決定元素間的相對位置關係,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間比較類排序。2.複雜度 3.演算法相關...

幾種排序演算法比較

資料結構 10 排序十 四 排序 sort thinking in algorithm 12.詳解十一種排序演算法 排序法平均時間 最差情形 穩定度額外空間 備註冒泡 o n2 o n2 穩定o 1 n小時較好 交換o n2 o n2 不穩定o 1 n小時較好 選擇o n2 o n2 不穩定o 1 ...

幾種快速的排序演算法

鴿巢排序,排序位元組串 寬位元組串最快的排序演算法,計數排序的變種 將計數緩衝區大小固定,少一次遍歷開銷 速度是stl中std sort的20多倍 更重要的是實現極其簡單!缺點是需要乙個size至少等於待排序陣列取值範圍的緩衝區,不適合int等大範圍資料。多一次遍歷的計數排序,排序位元組串的話速度約...