生產N個不重複隨機數

    參加3月22日深圳尚遊複試的時候被問到的問題。當時一直沒有想出比較好的解決方法,只提出一個使用鏈表的解決方法。時間複雜度上會比這個算法慢不少,因此在此記錄這個算法,以避免遺忘。 算法

void Random_m_n(int m, int n, int *arry)
//從1~m個數字中隨機取出n個不相同的數字
{
	srand((int)time(0));	
	//重置時間算子,用於產生隨機數
	int * data_m = new int[m];
	for(int i = 0;i < m; i++)
	{
		data_m[i] = i+1;
	}						
	//生成1~m個數字,存入數組中

	while (n--)
	{
		int i = rand() % m;	
		//產生範圍0~m-1內的一個隨機數				
		arry[n] = data_m[i];						
		//拷貝到目標數組中							
		data_m[i] = data_m[m];						
		//把當前位置的數字替換成其餘不重複數字		
		m--;
	}
}
相關文章
相關標籤/搜索