C 排序演算法練習 快速排序

2021-10-03 07:06:45 字數 1727 閱讀 3353

在所有的技藝中,武功是最強調內功的,比如同樣都學了辟邪劍譜,為什麼岳不群要比林平之厲害?武功的招式固然重要,但沒有深厚的內功,威力會大打折扣.那麼,內功是怎麼練出來的呢?冬練三九,夏練三伏,古人早有定論.而這些道理用在程式開發上也一樣適用.
#include

using

namespace std;

///*演算法步驟

// * 1.從數列挑乙個"基準"元素(pivot);

// * 2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。

// * 3.在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作;

// * 4.遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序;

//*/

//方法一:

template

<

typename t>

void

printarr

(t*a,size_t sz,string type)

template

<

typename t>

t paritition_1

(t*a,

int low,

int high)

a[low]

=pivot;

return low;

}template

<

typename t>

void

quick_st

(t*a,

int low,

int high)

}//方法二:

template

<

typename t>

t partion_2

(t*a,

int low,

int high)

}swap

(a[j]

,a[low]);

return j;

}int

rand

(int low,

int high)

template

<

typename t>

intpartion_3

(t*a,

int left,

int right)

//首先進行分割槽操作}}

swap

(a[j]

,a[left]);

//j位置的元素和首元素互換,即可保證標桿元素左邊為小於等於,右邊為大於等於

return j;

}template

<

typename t>

void

quick_st_ex

(t* a,

int left,

int right)

intmain()

;int high=

sizeof

(a)/

sizeof

(int)-

1;quick_st

(a,0

,high)

;quick_st_ex

(a,0

,high)

;printarr

(a,high+1,

"quick");

return0;

}

排序演算法 快速排序 C

單向掃瞄就地重排 int partitation 1way int array,int nidxleft,int nidxright return nidxsmall 雙向掃瞄就地重排 int partitation 2way int array,int nidxleft,int nidxright...

C 排序演算法 快速排序法

在閱讀此博文前,請先閱讀我的博文 排序演算法 基類設計 以了解基類的結構。在編寫 前,我們先來了解二路歸併法的排序過程 假設有乙個ilist型的集合list 集合的元素為list 0 到list n 1 n list.count 第1步 從a 0 n 1 中選擇乙個元素作為middle,該元素為支點...

C 排序演算法 4 快速排序

快速排序是目前各個排序演算法中效率優秀的一種排序方法,其採用的任然是分治法的思想,並且快速排序在實際中也是最為常用的。首先在陣列中取乙個值作為基準 可以隨便取 4,3,1,7,3,9,5,6,2 將比基準小的都放到基準的左邊,比基準大的都放到基準的右邊,以此將陣列分為兩部分 3,1,3,2,4,7,...