日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构基础(3) --Permutation 插入排序

發布時間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构基础(3) --Permutation 插入排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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中唯一的元素;

當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) {//已經遞歸到了最后一個元素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]的元素中選擇一個元素//作為當前序列的開頭元素std::swap(array[front], array[i]);permutation(array, front+1, last);std::swap(array[front], array[i]);}} }

算法說明:

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

?

算法演示:

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


小結:

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

?

插入排序

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

算法思想:

不斷的從尚未排序的序列中選擇一個元素插入到已經排好序的序列中(當然,會有一個選擇插入位置的過程:選擇一個位置,?該位置前的元素都比該元素小,?該位置后的元素都比該元素大),類似于現實生活中的斗地主的摸排過程.


//實現與解析 /**說明:outer:第一個未排序的元素inner:搜索第一個小于tmp的元素的位置tmp: 用于暫存第一個尚未排序的元素 */ template <typename Type> void insertionSort(Type *begin, Type *end) throw (std::range_error) {if ((begin == end) || (begin == NULL) || (end == NULL))throw std::range_error("pointer unavailable");//假設第一個元素已經排好序了for (Type *outer = begin+1; outer < end; ++outer){Type tmp = *outer; //暫存第一個未排序的元素Type *inner = outer;//inner 不斷尋找一個位置(*(inner-1) <= tmp),//使得tmp->*inner(tmp所保存的值插入到inner位置)while (inner > begin && *(inner-1) > tmp){*inner = *(inner-1); //元素后移-- inner; //指針前移}*inner = tmp; //將元素插入已排序序列} }template <typename Iter> void insertionSort(Iter begin, Iter end) {return insertionSort(&(*begin), &(*end)); } /**insertionSort_2算法的由來:可以使用*begin(序列的第一個元素)作為哨兵,這樣就可以省去insertionSort 中第15行的inner > begin判斷,但付出的代價是begin所指向的位置不能再存儲有用的數據,只能被用作排序的哨兵 -> 以空間換時間(個人感覺沒什么必要...) */ template <typename Type> void insertionSort_2(Type *begin, Type *end) throw (std::range_error) {if ((begin == end) || (begin == NULL) || (end == NULL))throw std::range_error("pointer unavailable");for (Type *outer = begin+2; outer < end; ++outer){*begin = *outer;Type *inner = outer;//因為*begin不可能 > *begin, 所以該循環一定會退出while (*(inner-1) > *begin){*(inner) = *(inner-1);--inner;}*inner = *begin;} }

附-permutation與std::next_permutation測試代碼

int main() {vector<char> str;for (char ch = 'a'; ch <= 'c'; ++ch)str.push_back(ch);permutation(&(*str.begin()), 0, 2);cout << "----------" << endl;typedef vector<char>::iterator Iter_type;do{for (Iter_type iter = str.begin(); iter != str.end(); ++iter)cout << *iter << ' ';cout << endl;}while (std::next_permutation(str.begin(), str.end()));return 0; }

總結

以上是生活随笔為你收集整理的数据结构基础(3) --Permutation 插入排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级黄色性生活片 | 亚州精品毛片 | 在线一区不卡 | 久久麻豆视频 | www.国产精品视频 | 美女隐私无遮挡免费 | 骚黄网站 | 久热精品视频在线 | av一级黄色 | 97视频人人 | 性欧美一区 | 久久久精品日韩 | 麻豆一区在线 | 国产69熟 | 色老头综合网 | 国产原创中文av | 国产亚洲精品精品国产亚洲综合 | 91精品国产自产在线观看 | 精品国产亚洲av麻豆 | 国产88av| 熟女视频一区二区三区 | 中文字幕av专区 | 欧美视频一区在线 | 大尺度摸揉捏胸床戏视频 | 韩国成人免费视频 | 国产人免费人成免费视频 | se日韩 | 国产精品一二三区视频 | 四虎免费在线观看 | 欧美成人精品一区二区三区在线看 | 欧美日韩一区二区三区四区五区 | 男人的天堂免费 | 亚洲经典一区 | 午夜毛片在线观看 | 国产成a人亚洲精品 | 一区二区三区四区人妻 | 亚洲第一黄网 | 在线麻豆av | 337p粉嫩大胆噜噜噜亚瑟影院 | 天天爽天天摸 | 老色批网站 | 婷婷99 | 欧美日韩电影一区 | 国产成人啪免费观看软件 | 欧美 日韩 中文字幕 | 色网站免费看 | 误杀1电影免费观看高清完整版 | 久久久国产精品成人免费 | 午夜国产一区二区三区 | 男生操女生动漫 | 亚洲成人动漫在线观看 | 日本公妇乱淫免费视频一区三区 | 国产激情福利 | 美女隐私黄www网站动漫 | 国产一二在线观看 | 轻点好疼好大好爽视频 | 久久精品这里只有精品 | 久久久夜色精品亚洲 | 亚洲大片免费观看 | 岛国av片 | 麻豆精品自拍 | 国产激情在线播放 | 国产成人精品a视频一区 | 91精品国产日韩91久久久久久 | 任你操精品 | 国产女主播喷水视频在线观看 | 椎名空在线| 久久精品国产亚洲AV成人雅虎 | 色播视频在线 | 五月少妇 | 日本高清二区 | 夜夜爱夜夜操 | 中文字幕在线视频观看 | 成全世界免费高清观看 | av免费在线观看网址 | 光棍福利视频 | 久久精品国产亚洲AV无码麻豆 | 亚洲美女av网站 | 狠狠人妻久久久久久综合麻豆 | 青青草狠狠干 | 亚洲精品综合在线观看 | 超碰97在线播放 | 欧美视频不卡 | 伊人网综合视频 | 日韩三级理论 | 久久国产精品精品国产色婷婷 | 伊人蕉| 屁屁影院一区二区三区 | 亚洲操| 永久免费看片在线观看 | 日韩久久高清 | 日本一区二区三区在线观看 | 小毛片网站 | 亚洲第一二区 | 全黄一级男人和女人 | 黄在线免费观看 | 国产一级一级国产 | 五月婷婷六月婷婷 | 久久精品国产精品亚洲 |