竹園論壇

標題: random_shuffle 的使用方法 [打印本頁]

作者: Sylveon    時間: 2014-8-27 13:33
標題: random_shuffle 的使用方法
1.直接用STL random_shuffle函數直接打亂陣列

random_shuffle有兩個參數,第一個是欲打亂的陣列開頭,第二個是欲打亂的陣列結尾再加1,為什麼加一呢?因為在STL的設計,區間都是包含開頭,但不包含結尾,而且如此一來,所增加的偏移量會恰等於元素個數,寫起來更方便。
[C++] 純文本查看 復制代碼
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<ctime>
using namespace std;

int main()
{
        //用time(null)初始化亂數
        srand(time(NULL));

        int arr[20];
        //1. 先按照1~20放進去
        for(int i=0;i<20;++i)
                arr=i+1;
        //用STL直接打亂 arr[0] ~ arr[19]
        random_shuffle( arr , arr+20 );

        for(int i=0; i<20; ++i)
        {
                cout<<arr<<' ';
        }
}


2.自己寫random_shuffle,在這裡示範random_shuffle是如何打亂陣列的。
swap(a,b) 交換a,b兩變數的數值
[C++] 純文本查看 復制代碼
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<ctime>
using namespace std;

int main()
{
        //用time(null)初始化亂數
        srand(time(NULL));

        int arr[20];
        //1. 先按照1~20放進去
        for(int i=0;i<20;++i)
                arr=i+1;
        //random_shuffle
        for(int i=0;i<20;++i)
                swap( arr , arr[rand()%(i+1)] );

        for(int i=0; i<20; ++i)
        {
                cout<<arr<<' ';
        }
}








歡迎光臨 竹園論壇 (http://forum.tfcis.org/) Powered by Discuz! X3.2