假设一个长度为10的数组arr:1,2,3,4,5,6,7,8,9,10假设m=101、用系统随机函数得到一个小于m的随机数n2、将arr[n]和数组最后一个元素即下标m-1所在的元素arr[m-1]交换,并将m减13、依次进行1、2这样的循环操作,直到m=0时终止操作假设第 1 次操作后,倒数第 1 个和随机到的第 5 个元素交换:more1,2,3,4,10,6,7,8,9,5第 2 次操作后,倒数第 2 个和随机到的第 2 个元素交换:1,9,3,4,10,6,7,8,2,5...类推以上操作,直到最后只有1个元素可供随机,再也不能随机为止以上算法可以用于获取指定个数的不重复随机数组,和打乱随机数组。参考文章:http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html附上实现代码void printarr(int *arr,int n) {
while(n-- > 1)printf("%d,",*(arr++));
printf("%d",*arr);
}
int main() {
srand(time(NULL));//初始化随机数种子
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int m = 10;
int n,tmp;
...
继续阅读
(18)