1. 程式人生 > >shuffle演算法及應用

shuffle演算法及應用

shuffle演算法(洗牌演算法)就是將順序打亂,一個典型的應該就是音樂播放器隨機播放,而在機器學習,資料探勘,做抽樣的時候需要shuffle, 一個好的shuffle演算法主要是保證時間複雜度是最小的

/*************************************
function: shuffle
author: liuyi
verison:1.0
date:2015.12.18
**************************************/
#include<iostream>
#include<stdlib.h>
#include<vector>
using namespace std;

template<class T>
void shuffle(vector<T>& src)
{
    size_t len = src.size();
    for(size_t i = 1; i < len; i++)
    {
        size_t j = rand() % len;
        T tmp = src[i];
        src[i] = src[j];
        src[j] = tmp;
    }
}

int main()
{
    srand(time(NULL));
    vector<int> a;
    for(int i = 0;i < 10; i++)
        a.push_back(i);
    for(int j = 0; j < 10; j++)
    {
        shuffle(a);
        for(size_t i = 0; i < a.size(); i++)
            cout<<a[i]<< ' ';
        cout<<endl;
    }

    return 0;
}