这几天看MFC,头晕眼花,也觉得没有什么可以写的。

  今天学习之余,看到一个面试题“1000个范围0-2000的数字,进行排序打印出来”。就想着实现一下。

  第一步先要建立1000个范围确定的不重复随机数字数组。

  建立数组的过程,首先想到在循环中随机数对范围取模,新生成的数字再与之前已经生成的数字进行比较,如果不重复,则放入数组,与已有数字重复,则重复操作。这样实现出来之后,效率非常低下,不能接受。

  既然范围确定,可以先建立一个顺序数组作为待选数组,然后从其中不断挑选数字。挑选数字时,以随机数为下标。这样做因为随机数会出现重复,挑选出的数字也就会重复。

  解决随机数字重复的问题比较困难,可以使同样的下标,在不同轮数的数字不同。这就需要将已经选入数组的元素从待选数组中剔除。对于数组的操作,删除一个元素,将后续元素前移,效率有些低。可以将末尾的元素放到挑选出数字的位置,将待选数组的“长度”减一。如果选中的数字在数组的“尾部”,自赋值并不会出现问题,数组“长度”减一之后,刚刚挑选的元素也从待选数组中排除,所以尾部并不需要特殊处理。

  用这种方法实现的随机数组,时间复杂度为O(n),是比较理想的。

  对于“排序”,根据要求只是“打印”,并且说明速度非常快。

  这样同样需要多一个数组,称为标记数组

  一遍遍历,将标记数组中随机数组元素对应的下标的元素标记。再一遍遍历,打印标记数组中有标记的“下标”。

 1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4 //生成无重复数字的随机数数组5 void random_arr(int def_arr[], const int value,6         int sel_arr[], const int size)7 {8     int i = 0;9     //待选数组初始化
10     for (i = 0; i < value; i++)
11         def_arr[i] = i;
12     //从待选数组挑取数字到随机数组
13     i = 0;
14     int max = value;
15     while (i < size)
16     {
17         int temp = rand() % max;
18         sel_arr[i++] = def_arr[temp];
19         def_arr[temp] = def_arr[--max];
20     }
21 }
22 //打印数组
23 void print_arr(const int* arr, const int size)
24 {
25     int i = 0;
26     for (i = 0; i < size; i++)
27         printf("%d ", arr[i]);
28     printf("\n");
29 }
30 //主函数
31 int main(void)
32 {
33     srand(time(0));
34     int size = 1000, value = 2000;
35     int def_arr[value];
36     int sel_arr[size];
37     random_arr(def_arr, value, sel_arr, size);
38     print_arr(sel_arr, size);
39     printf("\n\n\n");
40     //伪排序
41     int signal_arr[2000] = {0};
42     int i = 0;
43     for (i = 0; i < 1000; i++)
44         signal_arr[sel_arr[i]] = 1;
45     for (i = 0; i < 2000; i++)
46         if (signal_arr[i] = 1)
47             printf("%d ", i);
48     printf("\n");
49     return 0;
50 }

转载于:https://www.cnblogs.com/itit/p/3491506.html

无重复数字的随机数字数组相关推荐

  1. python组成不重复的三位数是多少_超星Python 练习实例1-组成多少个互不相同且无重复的三位数字...

    数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码: #!/u ...

  2. C/C++ 数字1234,能组成多少个互不相同且无重复的三位数数字。

    分析:设有a,b,c三个变量,可以用于控制三位数的个位(c),十位(b*10),百位(a*100),使用for循环嵌套,分别控制个位.十位.百位的切换,遇到符合条件的数便输出,定义变量count用于计 ...

  3. C语言随机字母生成,C++ 随机数字以及随机数字加字母生成的案例

    我就废话不多说了,大家还是直接看代码吧~ #include #include void MainWindow::slot_clicked() { QString strRand; int length ...

  4. 输出用1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数(C语言)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:嵌套循环结构的使用] 输出用1.2.3.4四个数字,能组成多少个互不相同且无重复数字的三位数. [实验指导] 分 ...

  5. JAVA实现随机无重复数字功能

    本文给大家介绍如何在JAVA中实现随机无重复数字的功能.如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到.包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题 ...

  6. java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)

    在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数.当时的第一反应是for循环生成10个数字,但是可能会有重复的情况:进一步思考,需要对生成的数字进行 ...

  7. php获取不重复的随机数字,php如何生成不重复的随机数字

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  8. 获取随机数字且不重复

    package practise;import java.util.Random; import java.util.Scanner; //案例:获取随机数字且不重复 public class Tes ...

  9. 全排列算法(无重复数字全排列/有重复数字全排列)/ 组合算法/ 求子集算法

    写在前面 全排列 1 无重复数字全排列 1.1 紫书版本 1.2 回溯法 2 有重复数字全排列 复盘易错点(可跳过) 写在前面 很久很久以前就想写的一篇博客,因为懒一直没开工,但是学习全排列算法算是我 ...

最新文章

  1. 触控(Touch) 、 布局(Layout)
  2. ACL控制访问列表原理+实验
  3. grafana+prometheus快速搭建MySql监控系统实践
  4. Linux下的各种文件阅读器
  5. PHP 一键安装扩展的程序-(Windows 系统)
  6. Web Storage API的介绍和使用
  7. HTTP 200 OK和HTTP 304 Not modified的由来
  8. 雷军微博念了几句诗 评论区疯狂猜谜
  9. STM8学习笔记---PWM互补波形输出
  10. ProxyToken:微软 Exchange 服务器中的认证绕过新漏洞,可窃取用户邮件
  11. 分享 ASP.NET WebForm 另外一种开发方式,逃离服务器控件
  12. 光纤接口怎么接 图解_视频光端机怎么连接,视频光端机接法图解
  13. mysql explode函数_hive中,lateral view 与 explode函数
  14. 即时通讯(IM)开源项目OpenIM本周版本发布-v1.0.6
  15. 怎样设置默认打印机(HttpPrinter 易桥打印中间件)
  16. 【愚公系列】2022年10月 使用win11系统自带远程桌面,远程控制VMware中Windows虚拟机系统
  17. 2022年诺贝尔物理学奖的科学内涵辨识
  18. macbook视频格式转换_为了找到MacBook这个视频转换软件我哭了!太强大了!
  19. Tetris项目总结
  20. 5-1链队入队出队操作

热门文章

  1. 饮冰三年-人工智能-linux-07 硬盘分区、格式化及文件系统的管理
  2. [转]FPGA的GTP信号PCB布线要点
  3. Oracle Schema Objects(Schema Object Storage And Type)
  4. jquery刷新iframe页面的方法(兼容主流)
  5. 【iOS学习笔记】IOS开发中设置applicationIconBadgeNumber和消息推送
  6. petshop4.0 具体解释之中的一个(系统架构设计)
  7. [转] 字符集、字符编码
  8. DOS 循环 FOR
  9. Android中AIDL的使用详解
  10. Activity启动过程