c++易语言 数组随机排序,随机产生5000个数,然后排序,并显示程序运行时间

博客访问: 804166
博文数量: 193
博客积分: 10192
博客等级: 上将
技术积分: 1835
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。(1)&&如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为。例如:#include#includevoid main(){&&&&&&&for(int i=0;i<10;i+)&&&&&&&&&&&&&printf("%d\n",rand());&&&//printf("%d\n",rand()%100);}//这里貌似有点小问题,若用rand()%n(n表示范围),也是可以产生一定范围的随机数的。&(2)&&如果你要随机生成一个在一定范围的数,你可以在宏定义中定义一个random(int number)函数,然后在main()里面直接调用random()函数:例如:随机生成10个0~100的数(主题代码):#define random(x) (rand()%x)&&&&&&&for(int x=0;x<10;x++)&&&printf("%d\n",random(100));&&&&//范围,0~100。---------------------(3)但是上面两个例子所生成的随机数都只能是一次性的,如果你第二次运行的时候输出结果仍和第一次一样。这与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1。&上面的两个例子就是因为没有设置随机数种子,每次随机数种子都自动设成相同值1 ,进而导致rand()所产生的随机数值都一样。srand()函数定义 : void srand (unsigned int seed);通常可以利用geypid()或time(0)的返回值来当做seed如果你用time(0)的话,要加入头文件#include例如:#include#include#include#define random(x) (rand()%x)&&&&&&&&&//此x表示。。int&main(){&&&&&srand((int)time(0));&&&&&for(int x=0;x<10;x++)&&&&&&&&printf("%d\n",random(100));&&&//产生0~100之间的数。&&&&&return 0;}这样两次运行的结果就会不一样了!!&&------------------------------------------------------------------&rand()通常的使用方法是这样的:rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数。这样,如果你要产生0~10的10个整数,可以表达为:int N = rand() % 11;这样,N的值就是一个0~10的随机数,如果要产生1~10,则是这样:int N = 1 + rand() % 11;总结来说,可以表示为:a + rand() % n其中的a是起始值,n是整数的范围。//此处,需用一个for循环控制要产生随机数的个数。&--------ok。我自己写小段代码测试下(主体代码):&for(int x=0;x<10;x++)&&printf("%d\n",rand()%100);//不过,每次产生的随机数,都是相同的。莫急,以下有解决办法。---------------------------------------------若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数,若要得到随机到百分位的随机小数,则需要先得到0~100的10个整数,然后均除以100,其它情况依此类推。----如 in a=rand()%10;&&&&&&//0~10的整数&&&return b=a/10;&&&&&//0~1的小数。-----------通常rand()产生的随机数在每次运行的时候都是与上一次相同的,这是有意这样设计的,是为了便于程序的调试。若要产生每次不同的随机数,可以使用srand( seed )函数进行随机化,随着seed的不同,就能够产生不同的随机数。----------如:#include#include#includeint main(){&srand((int)time(0));&&&//加了这个东东。&for(int x=0;x<10;x++)&&printf("%d\n",rand()%100);&&&&&//0~100之内。&return 0;}//这样,就能每次都产生出不同的随机数了。&如大家所说,还可以包含time.h头文件,然后使用srand( time(0))来使用当前时间使随机数发生器随机化,这样就可以保证每两次运行时可以得到不同的随机数序列(只要两次运行的间隔超过1秒)。
阅读(3108) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。随机产生100个数用二叉排序树和任选一种内排序方法进行排序并对二种算法进行比
输入:要求产生的随机数先写入文本数据文件input.txt中,如没有数据文件input.txt,则先创建数据文件input.txt,之后每次产生的100个随机数均追加到文件input.txt中。输出:(1)从文件input中顺序读出100个数,生成二叉排序树,并对二叉排序树进行中序遍历输出到文件output1.txt中,并从屏幕输出;(2)从文件input中读出相同的数据到数组中,用采用一种内部排序进行排序,输出到文件output2.txt中,并从屏幕输出。对上述算法进行分析,给出①和②两种算法的优劣比较。
09-12-22 &匿名提问
/*以下是用c++ 实现的二叉排序树的源代码*/#include&iostream.h&typedef struct TreeNode{struct TreeNode *struct TreeNode *}treeNclass BiSortTree{public: &#160; &#160;BiSortTree(void);void desplayTree(void);//显示这个树void insertTree(int key);//在树中插入一个值 &#160;deleteTree(int key);//在树中删除一个值 &#160; &#160;treeNode* searchTree(int key);//在树中查找一个值 &#160; ~BiSortTree();private:treeNode* &#160;buildTree(treeNode* head,int number);//建立一个树treeNode* &#160;search(treeNode* head ,int key);//查找treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p);//查找出p的父亲节点的指针treeNode* BiSortTree::searchMinRight(treeNode* head);//找到右子树中最小的节点void showTree(treeNode* head);//显示 &#160; &#160;void destroyTree(treeNode* head);//删除treeNode *H &#160; };/**************以下是建立一个二叉排序树****************/BiSortTree::BiSortTree(){ &#160; cout&&&建立一棵二叉排序树,请输入你要建树的所有数(以-1 作为结束标志!): &&& &#160; Head=NULL; &#160; &#160; cin&& &#160; while(number!=-1) &#160; { &#160; Head=buildTree(Head,number); &#160; &#160; &#160; cin&&
&#160; &#160; }}treeNode* BiSortTree::buildTree(treeNode* head,int number){treeNode *p; &#160; p=new treeN &#160; &#160;p-&key=p-&left =p-&right=NULL;if(head==NULL){ &#160; &#160; &#160; &#160; &#160;}else{
&#160; &#160; &#160; if(p-&key &head-&key)head-&left=buildTree(head-&left,number); &#160; else &#160;head-&right=buildTree(head-&right,number);
&#160; &#160; &#160;}}/*****************以下是在一棵二叉排序树插入一个数***********************************/void BiSortTree::insertTree(int key){Head=buildTree(Head,key);}/*****************以下是在一个二叉排序树查找一个数是否存在*************************/treeNode* &#160;BiSortTree::searchTree(int key){return search(Head,key);}treeNode* BiSortTree::search(treeNode* head ,int key){ if(head==NULL)return NULL;if(head-&key==key)else{if(key&head-&key )return search( head-&left,key); &#160; &#160;elsereturn search(head-&right,key);}}/************以下是在一个二叉排序树删除一个给定的值*********************************/BiSortTree::deleteTree(int key){treeNode *p;p=NULL; &#160; &#160;p=search(Head,key);if(p==NULL){cout&&&Don&#39;t find the key&;} &#160; &#160;if(p==Head){Head=NULL;}else{treeNode*parent=searchParent(Head,p);if(p-&left==NULL&&p-&right==NULL)//叶子节点{ &#160; &#160;if(parent-&left==p){parent-&left=NULL;} &#160; &#160;else{parent-&right=NULL;}} &#160; &#160; &#160; &#160;else//非叶子节点{ &#160; &#160; &#160; &#160; &#160; if(p-&right==NULL)//该节点没有右孩子 &#160; { &#160; if(parent-&left==p) &#160; { &#160; &#160; parent-&left=p-& &#160; } &#160; &#160; &#160; else &#160; { &#160; parent-&right=p-& &#160; } &#160; } &#160; else//该点有左右孩子 &#160; { &#160; treeNode * rightMinSon,* secondP//secondParent为右子树中的最小节点的父亲 &#160; rightMinSon=searchMinRight(p-&right); &#160; secondParent=searchParent(p-&right ,rightMinSon); &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; secondParent-&left=rightMinSon-&
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; if(p-&right==rightMinSon)//右子树中的最小节点的父亲为p &#160; { &#160; &#160;
&#160; &#160; &#160; &#160;p-&right=rightMinSon-&
&#160; } &#160; &#160;
&#160; p-&key=rightMinSon-& &#160; &#160;
&#160; &#160;
&#160; }}}}treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p){if(head-&left==p||head-&right==p||head==p||head==NULL) &#160; &#160;else{if(p-&key&head-&key)return searchParent(head-&left ,p);elsereturn searchParent(head-&right ,p);}}treeNode* BiSortTree::searchMinRight(treeNode* head)//找到右子树中最小的节点{if(head-&left ==NULL||head==NULL){}else{return searchMinRight(head-&left);}}/*****************以下是显示一个二叉排序树****************************************/void BiSortTree::desplayTree(void){showTree(Head);cout&&}void BiSortTree::showTree(treeNode* Head){if(Head!=NULL){showTree(Head-&left ) ; &#160; &#160;cout&&Head-&key&&&#39; &#39; ;showTree(Head-&right) ;}}/*****************以下是删除一棵整二叉排序树************************************/BiSortTree::~BiSortTree(){cout&&&已经消除了一棵树!!!!&&&destroyTree(Head);}void BiSortTree::destroyTree(treeNode* head ){if(head!=NULL){destroyTree(head-&left );destroyTree(head-&right );}}/*********************/void print(){ &#160; &#160;cout&&endl&&endl&&&以下是对二叉排序树的基本操作:&&&endl&&&1.显示树&&&endl &#160; &#160;&&&2.插入一个节点&&&endl&&&3.寻找一个节点&&&endl&&&4.删除一个节点&&&}void main(){BiSortT &#160; &#160;int choiceN &#160; &#160;while(1){ &#160; &#160; &#160; print() ; &#160; &#160; cout&&&请选择你要进行的操作(1~4)&&& &#160; cin&&choiceN &#160; switch(choiceNumber) &#160; { &#160; &#160; &#160; &#160; &#160;case 1: &#160; &#160; &#160; &#160; &#160; &#160;tree.desplayTree(); &#160; &#160; &#160; &#160; &#160; &#160; &#160;case 2: &#160; &#160; &#160; &#160; &#160;cout&&&请插入一个数: &&& &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;cin&& &#160; &#160; &#160; &#160; &#160; &#160; &#160;tree.insertTree(number); &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;tree.desplayTree(); &#160; &#160; &#160; &#160; &#160; &#160;
&#160; &#160; &#160; &#160; &#160; &#160; &#160;case 3: &#160; &#160; &#160; &#160; &#160; &#160; &#160;cout&&&请插入你要找数: &&& &#160; &#160; &#160; &#160; &#160;cin&& &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;if(tree.searchTree(number)==NULL) &#160;{ &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;cout&&&没有发现&&& &#160;} &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;else &#160;{ &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;cout&&&发现&&& &#160; &#160;} &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; case 4: &#160; &#160; &#160; &#160; &#160;cout&&&请输入你要删除的数: &&&
&#160; &#160; &#160; &#160; &#160;cin&& &#160; &#160; &#160; &#160; &#160; &#160; &#160;tree.deleteTree(number); &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;tree.desplayTree(); &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;default: &#160; } &#160; &#160; &#160;cout&&&你是否要继续(Y/N)?&&& &#160; &#160; &#160;cin&& &#160;if(flag==&#39;N&#39;||flag==&#39;n&#39;)}} .
请登录后再发表评论!
c 语言能实现 算法书上都有,有些软件也行 像matlab,但是还是自己练一下,对 学会以及体会编程有帮助,祝学业有成!
请登录后再发表评论!
c 语言能实现 算法书上都有,有些软件也行 像matlab,但是还是自己练一下,对 学会以及体会编程有帮助,祝学业有成!
请登录后再发表评论!c语言输入N个数,然后从小到大排序输出到屏幕上_问答百科_我爱台球网
c语言输入N个数,然后从小到大排序输出到屏幕上
c语言输入N个数,然后从小到大排序输出到屏幕上 C/C++语言 &|&提问者:网友&|&提问时间: 昨天 最完美的答案:#include?&stdlib.h&#include?&stdio.h&int?m_sort(int?a[],int?n)?//冒泡排序?{????int?i,j,b;????for(i=0;?i&n-1;?i++)????????for(j=i+1;?j&n;?j++)????????????if(a[i]&a[j])????????????{????????????????b=a[i];????????????????a[i]=a[j];????????????????a[j]=b;????????????}}int?main(){?int?a[100],i,n;?scanf("%d",&n);?//输入数据个数?for(i=0;i&n;i++)?//输入数据????scanf("%d",&a[i]);?m_sort(a,n);?//调用排序??for(i=0;i&n;i++)??//输出????printf("%d?",a[i]);?printf("\n");?????}? 其他参考答案: matlab编程 随便输入三个数字,然后从小到大排序,求代码用户随机输入N个数,从小到大排序。设计一个windows应用程序,连续输入一串数字,然后从小到大顺...用C语言编程:输入5个数,按从小到大顺序输出!?老师的习题: 实现对n个数的数列从小到大排序。(两两比较交换...}

我要回帖

更多关于 c语言如何产生随机数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信