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