快速排序演算法C 實現

2021-07-03 16:20:10 字數 1939 閱讀 9187

經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看

<

演算法導論

>

這本書,而在他們發布的**通常是差不多的版本,估計也是網上

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 實現

namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...

快速排序演算法C 實現

quick sort stl中也有現成的快速排序演算法,內部實現採用了以下技巧 1 樞軸的選擇採取三數取中的方式 2 後半段採取迴圈的方式實現 3 快速排序與插入排序結合 include include includeusing namespace std 這一版本是最簡單實現版本,對於快速排序的優...

C 實現快速排序演算法

快速排序採用的是分治法,其平均時間複雜度為o nlogn 一趟快速排序的演算法是 1 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給 key,即 key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j j 1即j 找到第乙個小於 key的值...