C 的快速排序

2021-10-21 18:55:25 字數 1808 閱讀 7713

學習c++可以使用stl模板實現對陣列的快速排序。(自動從小到大排)

語法:

sort

(a, a + n)

;//a是陣列名,n是陣列長度

定義陣列:

int a[11]

=;

排序前:

排序前:18

94241

1811

6412

使用sort函式:

sort

(a, a + n)

;

排序後:

排序後:12

48911

1218

4164

需要注意的是,sort函式起點一般為陣列第乙個元素,即a[0],如果需要從函式a[0]後幾位開始排,就在sort函式內陣列後加幾。

即如果從a[1]開始排:

sort

(a +

1, a +

1+ n)

;

當然我們有時候也可能需要從大往小排的時候我們應該怎麼辦呢,這時候我們就需要自定義乙個cmp函式去調整排序順序。

bool

cmp(

int a,

int b)

我們使用自定義cmp函式之後:

sort

(a, a + n,cmp)

;

此時排序後如下:

排序後:

6441

1812119

8421

就變成由大往小排了。

當然我們也可以使用一些別的方法:

sort函式的第三個引數可以用這樣地語句告訴程式,你所採用的排序原則:

less《資料型別》()//從小到大排序

greater《資料型別》()//從大到小排序

sort

(a, a + n, greater<

int>()

);排序前:18

94241

1811

6412

排序後:

6441

1812119

8421

sort

(a, a + n, less<

int>()

);排序前:18

94241

1811

6412

排序後:12

48911

1218

4164

我們可以通過自己的需要選擇使用一些方法。

在日常學習過程中,我們可能需要對結構體內部的某個變數進行排序,那我們在這時候是否能夠繼續使用sort函式呢。

當然我們還是可以繼續使用的,不過我們可能要對cmp函式做一些改變了,讓它能夠適合我們繼續使用。

先定義乙個結構體:

struct stu

arry[10]

=;

我們需要對cmp函式做一些改變,如下:

bool

cmp(stu x, stu y)

//此時我們就需要給cmp函式傳進改結構體名,和兩個變數來接收資料

接下來就和使用sort函式重排陣列一樣了。

以上內容只是個人學習的一些總結和體會,如有錯誤,希望大佬們能夠進行指正。

排序 快速排序(C )

1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...

排序 快速排序(C )

如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...

快速排序 c

快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...