random_shuffle演算法小例子
原文地址:http://blog.csdn.net/aheroofeast/article/details/3907192
首先簡單的介紹一個撲克牌洗牌的方法,假設一個陣列 poker[52] 中存有一副撲克牌1-52的牌點值,使用一個for迴圈遍歷這個陣列,每次迴圈都生成一個[0,52)之間的隨機數RandNum,以RandNum為陣列下標,把當前下標對應的值和RandNum對應位置的值交換,迴圈結束,每個牌都與某個位置交換了一次,這樣一副牌就被打亂了。
[cpp] view plain copy
- for (int i = 0; i < 52; ++i)
- {
- int RandNum = rand() % 52;
- int tmp = poker[i];
- poker[i] = poker[RandNum];
- poker[RandNum] = tmp;
- }
random_shuffle 的第三個引數,需要的是一個函式物件, 這個函式物件的引數是演算法遍歷序列時的index,返回值是0-X 之間的一個隨機數,這個 X 可由使用者來決定。預設的random_shuffle中, 被操作序列的index 與 rand() % N 兩個位置的值交換,來達到亂序的目的。
[cpp] view plain copy
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <ctime>
- #include <cstdlib>
- using namespace std;
- const int POKER_NUM = 52; //52張撲克牌
- void print_poker(int PokerNum)
- {
- cout << PokerNum << " ";
- }
- class MyRand
- {
- public:
- int operator()(int index)
- {
- return rand() % POKER_NUM;
- }
- };
- int main()
- {
- srand( (unsigned)time(NULL) ); //設定隨即數生成器的種子
- vector<int> poker; //一副牌,牌點數從 1 計
- //初始化
- for (int num = 0; num < POKER_NUM; ++num)
- {
- poker.push_back(num+1);
- }
- //用預設隨機數洗一遍
- random_shuffle(poker.begin(), poker.end());
- for_each(poker.begin(), poker.end(), print_poker);
- cout << endl;
- //用自定義隨機數再洗一遍
- random_shuffle(poker.begin(), poker.end(), MyRand());
- copy(poker.begin(), poker.end(), ostream_iterator<int>(cout, " "));
- cout << endl;
- }
相關文章
- 【python小例子】小例子拾憶Python
- mybatis小例子2MyBatis
- websocket使用小例子Web
- java反射小例子Java反射
- 小例子理解多型多型
- jQuery的常用小例子jQuery
- 【丁原 】優化小例子優化
- 夥伴演算法例子演算法
- python字典的小例子Python
- Windows下 flex + bison 小例子WindowsFlex
- HTML5 小動畫例子HTML動畫
- 一個jquery的小例子jQuery
- python閉包小例子Python
- 字元驅動小例子解析字元
- LRU演算法簡單例子演算法單例
- PHP中ZendCache用法的小例子PHP
- 淘寶大圖滾動小例子
- react-refetch的使用小例子React
- 一個小例子搞懂redux的套路Redux
- 幾個彙編入門小例子
- 演算法測試例子特殊輸入形式演算法
- 有關mysql中ROW_COUNT()的小例子MySql
- 小例子 理解 Laravel 中的 控制反轉模式Laravel模式
- 請用心練完這16個webpack小例子Web
- 微信小程式開發-IP地址查詢-例子微信小程式
- java POI 操作EXCEL小例子+各種屬性JavaExcel
- json listView 資料請求解析小例子JSONView
- Oracle rman 全備份的一個小例子Oracle
- 幾個行列轉換的實用小例子
- 小演算法演算法
- 有關程式碼執行效率提升的小例子
- dubbo入門和springboot整合dubbo小例子Spring Boot
- 一個被寫爛的redux計數小例子Redux
- 用一個小例子教你入門機器學習框架TensorFlow機器學習框架
- 記一次優化ansible inventory的小例子優化
- vue2練習五個小例子筆記_byKLVue筆記
- 小墨學演算法演算法
- KM演算法小記演算法