首页 > 代码库 > 随机化一维数组

随机化一维数组

一 问题:假设有一个一维整型数组,随机化这个数组,即使得每个元素在数组中随机出现,且概率一样。

二 解题思路:

    1. 构造两个数组,一个辅助数组,用于哈希,另一个用于保留优先级。例如,输入一组数据2,1,0

那么,辅助数组为0,1,2,即首先随机生成一个3之内的整数,比如2,如果在2的位置没有元素,则放入,否则再次随机生成元素,直到辅助数组中所有元素都不相同,将这些都不相同的元素放入优先级数组。

2. 按照优先级,对原数组进行插入排序。

三 代码

/*************************************************************************
    > File Name: randomArray.c
    > Author: ma6174
    > Mail: ma6174@163.com 
    > Created Time: Mon 25 Aug 2014 09:44:03 PM CST
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#define random(m) (rand() % m)
#define N 10
int main() {
	srand((int)time(0));   // set the seed
	int array[N];          // input array
	int assist_array[N];
	int prority[N];       // indicate prority of every element in the array
	int e;
	int i, j;
	int tmp, tmp1;
	for(i = 0;i < N;i++) {
		assist_array[i] = -1;   // initialize
	}
	for(i = 0;i < N;i++) {
		scanf("%d", &array[i]);
	}
	for(i = 0;i < N;i++) {
		e = random(N);
		if(assist_array[e] == -1) {   // if the e is only one 
			assist_array[e] = e;
			prority[i] = e;        // put in the prority
		}
		else {
			i--;                 // game is continuing
		}
	}
	/*
	 * insert sort in terms of prority
	 * */
	for(i = 1;i < N;i++) {         
		tmp = prority[i];
		tmp1 = array[i];
		j = i - 1;
		while(j >= 0 && prority[j] > tmp) {
			array[j + 1] = array[j];
			j--;
		}
		array[j + 1] = tmp1;
	}
	printf("random the array is:\n");
	for(i = 0;i < N;i++) {
		printf("%d\n", array[i]);
	}

	return 0;
}


四 测试


随机化一维数组