生成1到n的隨機排列(C++實現)
阿新 • • 發佈:2019-01-03
主要思想:隨機生成一個數組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; } }