1. 程式人生 > >生成1到n的隨機排列(C++實現)

生成1到n的隨機排列(C++實現)

主要思想:隨機生成一個數組a[],將陣列 a[] 排序後,排序後的陣列中的資料在原來陣列中的位置所組成的一個序列即為1  到 n 的一個隨機排列

原始碼:

#include"iostream"
#include"ctime"
#include"cstdlib"
#define MAX 20000
using namespace std; 
struct element{     //用來排序的資料結構 
		int data;  // 資料 
		int index;  // 序號 
};
int cmp(const void *a,const void *b); //升序排列 
void rand_of_n(int a[],int n);  //產生 1-n 的隨機排列並存到 a[] 中 
int main(){
	int a[MAX];
	int i,n=10;
	rand_of_n(a,n);   
	for(i=0;i<n;i++)
		cout<<a[i]<<" ";
	return 0; 
}

int cmp(const void *a,const void *b){   // 升序排序
	return((struct element*)a)->data - ((struct element*)b)->data;
}
void rand_of_n(int a[],int n){
	int i;
	struct element ele[MAX];
	srand((int)time(0));  // 初始化隨機數種子 
	for(i=0;i<n;i++){
		ele[i].data=rand();  // 隨機生成一個數 
		ele[i].index=i+1;
	}
	qsort(ele,n,sizeof(ele[0]),cmp);  //排序 
	for(i=0;i<n;i++){
		a[i]=ele[i].index;
	}
}