快速排序演算法(C 實現)

2021-09-08 20:32:48 字數 2923 閱讀 7922

想到了快速排序,於是自己就用c#實現了快速排序的演算法:

快速排序的基本思想:

分治法,即,分解,求解,組合 .

分解:

在 無序區r[low..high]中任選乙個記錄作為基準(通常選第乙個記錄,並記為keyvalue,其下標為keyvalueposition),以此為基準劃分成兩個較小的 子區間r[low,

keyvalueposition

- 1]和r[

keyvalueposition

+ 1 , high],並使左邊子區間的所有記錄均小於等於基準記錄,右邊子區間的所有記錄均大於等於基準記錄,基準記錄無需參加後續的排序。而劃分的關鍵是要求出 基準記錄所在的位置

keyvalueposition

.求解:

通過遞迴呼叫快速排序對左、右子區間r[low..

keyvalueposition

-1]和r[

keyvalueposition

+1..high]快速排序

組合:

當"求解"步驟中的兩個遞迴呼叫結束時,其左、右兩個子區間已有序。對快速排序而言,"組合"步驟無須做什麼,可看作是空操作。

具體過程:

設序列為r[low,high],從其中選第乙個為基準,設為keyvalue,然後設兩個指標i和j,分別指向序列r[low,high]的起始和結束位置上:

1),將i逐漸增大,直到找到大於

keyvalue

的關鍵字為止;

2),將j逐漸減少,直到找到小於等於

keyvalue

的關鍵字為止;

3),如果i

keyvalue

放到合適的位置上,即i和j同時指向的位置(或者同時指向的位置-1),則此位置為新的

keyvalueposition

備註:

快速排序是不穩定排序,即相同的關鍵字排序後,相對位置是不確定的。

下面是我的c#實現的**

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;56

namespace

quicksort7;

14//

myarray = new int ;

15//

myarray = new int ;

1617

intlowindex =0

;

//陣列的起始位置(從0開始)

18int

highindex

=myarray.length -1

;

//陣列的終止位置

1920

//快速排序

21quicksortfunction(myarray, lowindex, highindex);

2223

//輸出排完之後的陣列

24for

(inti =

0; i

<

myarray.length; i++)

2528}29

30//

快速排序(目標陣列,陣列的起始位置,陣列的終止位置)

31private

static

void

quicksortfunction(

int array,

intlow,

inthigh)

3245}46

catch

(exception ex)

4748}49

50//

快速排序的核心部分:確定關鍵值在陣列中的位置,以此將陣列劃分成左右兩區間,關鍵值游離在外。(返回關鍵值應在陣列中的下標)

51private

static

intkeyvaluepositionfunction(

int array,

intlow,

inthigh)

5266

while

(leftindex

<

rightindex

&&array[rightindex]

>

keyvalue)

//右側動態下標逐漸減小,直至找到小於或等於keyvalue的下標

6770

if(leftindex

<

rightindex)

//如果leftindex < rightindex,則交換左右動態下標所指定的值;當leftindex==rightindex時,跳出整個迴圈

7176}77

78//

當左右兩個動態下標相等時(即:左右下標指向同乙個位置),此時便可以確定keyvalue的準確位置

79temp

=keyvalue;

80if

(temp

<

array[rightindex])

//當keyvalue < 左右下標同時指向的值,將keyvalue與rightindex - 1指向的值交換,並返回rightindex - 1

8186

else

//當keyvalue >= 左右下標同時指向的值,將keyvalue與rightindex指向的值交換,並返回rightindex

8792}93

}94}

。。。。。。。。。。

快速排序演算法 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 實現

經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20分鐘,你是根本寫不出來快速排序的演...

快速排序演算法C 實現

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