快速排序演算法
c++實現
[評注版
]經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看
<
演算法導論
>
這本書,而在他們發布的**通常是差不多的版本,估計也是網上
copy
一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,
20分鐘,你是根本寫不出來快速排序的演算法的,當然除了那些死記硬背的兄弟。
說說我寫這篇文章的目的吧,記得有一天我想重新看看
<
演算法導論
>
,看到快速排序我覺得很簡單,於是按奈不住,想動手寫寫,可是寫完了,在測試有些資料的時候總也過不去,於是我就想在網上找找按照
<
演算法導論
>
的提示邏輯寫成的快速排序,但是很是失望,網上差不多都是同乙個版本,而且不是我想要的,於是有了本文。
為了讓本文自成體系,先看看什麼是快速排序,快速排序是一種排序演算法。在平均狀況下,排序
n 個專案要
ο(n log n)
次比較。在最壞狀況下則需要
ο(n2)
次比較,但這種況並不常見。事實上,快速排序通常明顯比其他
ο(n log n)
演演算法更快,因為它的內部迴圈(
inner loop
)可以在大部分的架構上很有效率地被實作出來,且在大部分真實世界的資料,可以決定設計的選擇,減少所需時間的二次方項之可能性。
首先讓我們來看看
<
演算法導論
>
上面的演算法邏輯
quicksort(a, p, r)//
快速排序演算法
if (p < r )
partition(a, p, r) x
= a[r]
//選擇最後乙個元素作為比較元素 i
= p –1
//這個慢速移動下標必須設定為比最小下表p小
1,否則兩個元素的序列比如2,
1無法交換
for
j =
p to
r-1//
遍歷每個元素
} exchange
a[i+1]
with
a[r]
//交換
return
i + 1//
返回分割點
一次完整的比較過程如下圖:
演算法導論快速排序邏輯
c++實現
//data swop function
void
swap(int
&p,int
&q)
//partition function
intpartition(int
arrayinput,int
nlow,int
nhigh)
} }
swap(arrayinput[j+1],arrayinput[nhigh]);
return
(j+1); }
//quick sort
void
quick_sort(int
arrayinput,int
nlow,int
nhigh) }總結
本文對<
演算法導論
>
的快速排序演算法實現的關鍵點進行了詳細的闡述,另外,本文給出了嚴格按照,
<
演算法導論
>
快速排序演算法邏輯實現的
c++快速排序演算法,希望對大家有所幫助。
排序演算法 快速排序 C
單向掃瞄就地重排 int partitation 1way int array,int nidxleft,int nidxright return nidxsmall 雙向掃瞄就地重排 int partitation 2way int array,int nidxleft,int nidxright...
快速排序演算法(C)
sort快排函式的基本版,效率n logn,快排的完全版就是在遞迴之中夾雜對序列的預判斷,最優的選擇排序方法,快速排序演算法只是其中之一。簡單的說明一下快速排序的思想,對於乙個數列,首先選擇乙個基數 x 進行第一次排序,把比x 小的放在x左邊,大的放右邊 預設從小到大 例如 8 4 5 7 6 9 ...
C 快速排序演算法
對10個數字用快速排序演算法排序 演算法思想 二分法 遞迴呼叫 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespa...