多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 數據結構基礎(3) --Permutation & 插入排序

數據結構基礎(3) --Permutation & 插入排序

來源:程序員人生   發布時間:2015-01-04 09:02:52 閱讀次數:3444次

Permutation(排列組合)

排列問題:

設R = {r1, r2, ... , rn}是要進行排列的n個元素, Ri = R-{ri}; 集合X中元素的全排列記為Permutation(X), (ri)Permutation(X)表示在全排列Permutation(X)的每個排列前加上前綴ri得到的排列.

R的全排列可歸納定義以下:

當n=1時,Permutation(R)={r},r是集合R中唯1的元素;

當n>1時,Permutation(R)由(r1)Permutation(R1),(r2)Permutation(R2), ..., (rn)Permutation(Rn)構成。

順次遞歸定義,則可設計產生Permutation(X)的遞歸算法以下:

template <typename Type> void permutation(Type *array, int front, int last) { //已遞歸到了最后1個元素 if (front == last) { //打印輸出 for (int i = 0; i < front; ++i) { cout << array[i] << ' '; } cout << array[front] << endl; return ; } else { for (int i = front; i <= last; ++i) { // 不斷的從下標為[front ~ last]的元素當選擇1個元素 //作為當前序列的開頭元素 std::swap(array[front], array[i]); permutation(array, front+1, last); std::swap(array[front], array[i]); } } }

算法說明:

算法Permutation(array, k, m)遞歸地產生所有前綴是array[0:k⑴],且后綴是array[k:m]的全排列的所有排列.函數調用(list, 0, n⑴)則產生list[0:n⑴]的全排列.

 

算法演示:

char str[] = “abc”;的遞歸調用進程如圖:


小結:

雖然我們自己實現了Permutation, 但C++ STL中也實現了std::next_permutation算法, 在1般利用中, 我比較推薦使用STL中已實現好的next_permutation, 畢竟STL的代碼質量還是非常高的, 而且速度1點也不遜色于我們的實現;

 

插入排序

插入排序是低級排序中速度最快的1種(冒泡/選擇/插入排序效力均為O(N^2)),但是跟快速排序(NlogN),歸并排序(NlogN)還是有1定的差距的⊙

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美18videosex性欧美1819 | 在线人成精品免费视频 | 操人网站| 国产人成精品午夜在线观看 | 另类图片综合 | 亚洲欧美成人在线 | 五月天视频网 | 中日韩一区二区三区 | 在线免费看 | 成人不卡视频 | 亚洲精品国产第一区第二区国 | 免费网站在线播放 | 欧美99热 | 中文字幕乱码中文乱码51精品 | 一级毛片a免费播放王色 | 国产图片亚洲精品一区 | 欧洲美女粗暴交视频 | 天天看毛片| 美女的隐私视频网站蜜桃视频 | 日韩欧美一区二区三区在线视频 | 日本在线视频一区 | 亚洲人成777在线播放 | 性视频一区二区三区免费 | 九九久久99综合一区二区 | 国产一级毛片欧美视频 | 亚洲成年人在线观看 | 免费看羞羞动漫视频网站 | 在线 | 一区二区三区四区 | 亚洲欧美综合国产精品一区 | 伊人五月| 日本亚洲精品久久 | 日本高清免费视频www | 亚洲影院手机版777点击进入影院 | 一级毛片在线免费看 | 手机看片成人 | 性刺激欧美三级在线观看 | 亚洲国产成人久久综合一区77 | 三级全黄在线观看www桃花 | 精品福利在线 | 久久综合九色综合97欧美 | 亚洲毛片网站 |