随机产生N个整数,并对其进行排序,查找……

原创 2007年09月19日 12:36:00

 

#include <stdlib.h>
#include 
<stdio.h>
#include 
<time.h>   //使用当前时钟做种子

#define N 100

void Produce(int *dat)  //产生N个随机大小的整数
...{
 
int i;
 srand( (unsigned)time( NULL ) );
//初始化随机数
 for( i = 0; i < N; i++ )
  dat[i] 
= rand(); 
}


void Output(int dat[])  //输出函数
...{
 
int i;
 
for (i = 0; i < N; i++)
  printf(
"dat[%d]=%d ",i,dat[i]);
 printf(
" ");
}


void Swap(int &a, int &b) //交换两个变量的值
...{
 
int temp;
 temp 
= a; a = b; b = temp;
}


int Partition(int *dat,int p,int r)//把 < x 的元素换到左边的区域,把 > x 的元素换到右边的区域
...{
 
int i = p, j =+ 1;
 
int x = dat[p];
 
while (1)
 
...{
  
while(dat[++i]<&& i<r);
  
while(dat[--j]>x);
  
if(i>=j) break;
  Swap(dat[i],dat[j]);
 }

 dat[p] 
= dat[j];
 dat[j] 
= x;
 
return j;
}


void QuickSort(int *dat,int p,int r)  //快速排序
...{
 
if(p<r)
 
...{
  
int q = Partition(dat,p,r);
  QuickSort(dat,p,q
-1);
  QuickSort(dat,q
+1,r);
 }

}


int BinarySearch(int *dat,int &data, int n) //二分查找
...{
 
int left = 0;
 
int right = n-1;
 
while (left <= right)
 
...{
  
int middle = (left+right)/2;
  
if(data==dat[middle]) return middle;
  
if(data > dat[middle])  left = middle + 1;
  
else right = middle - 1;
 }

 
return -1;
}


void main( void )
...{
 
int data,temp,n;
 n 
= N;
 
int *dat;
 dat 
= new int[n];
 Produce(dat);
 Output(dat);
 QuickSort(dat,
0,N-1);
 Output(dat);
 printf(
"请输入要查找的数据:");
 scanf(
"%d",&data);
 temp 
= BinarySearch(dat,data,n);
 
if(temp==-1) printf("没有找到! ");
 
else printf("找到了,%d=dat[%d]…… ",data,temp);
}
    

顺序表的查找

#include #include #include #include #define MAX 10 typedef struct{ int *elem; int length; }SSTable...
  • sjlcute
  • sjlcute
  • 2015年11月16日 17:33
  • 1314

C++大随机整数的产生,排序和查找

这里想记录一个之前遇到的一个很有意思的与大随机数相关的问题,也是自己长时间琢磨出来的结果,这里想分享一下; 首先给出问题(很短,其实就一句话):          生成N=10^12个范围在0~10^...
  • u010842413
  • u010842413
  • 2014年03月10日 00:44
  • 2083

产生10个1-100的随机整数, * 把其中的奇数按照从小到大的顺序进行排序, * 并按照“1,2,3,、、、”这样的格式打印到d盘下的number.txt文档中。

package com.heima.test;import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IO...
  • yixiaomeigui
  • yixiaomeigui
  • 2016年04月12日 22:47
  • 802

【算法设计-随机算法】利用随机算法生成均匀随机排序数组

思想: 1.首先生成1到n的数组A 2.生成1到n^3的n个数的随机数组P 例如A= P= 3.对p数组进行从小到大的排序(利用快速排序),生成数组P1= 4.根据3中P1的顺序,生成随机数数组A1=...
  • wodeai1625
  • wodeai1625
  • 2015年04月28日 16:12
  • 879

对数组中N个整数由小到大排序的几种方法

这里提供两种方法:选择法和冒泡法,依次实现对数组中整数的排序问题。一:所谓选择法就是先将 N 个数中最小的数与 a[0] 对换;再将 a[1] 到 a[N - 1] 中最小的数与 a[1] 对换 .....
  • z_x_m_m_q
  • z_x_m_m_q
  • 2017年12月13日 16:45
  • 192

数据结构与算法-实验5-自动产生随机数,并实现对数的排序

#include  #include  #include  #include  using namespace std;   void SimpleRandDemo(int s[],int...
  • qq_19995883
  • qq_19995883
  • 2016年11月07日 09:48
  • 540

matlab中生成无重复随机整数的方法

Matlab自带函数randperm(n)产生1到n的整数的无重复的随机排列,利用它就可以得到无重复的随机数。例如: randperm(n):产生一个1到n的随机顺序。  >> randp...
  • wangdq_1989
  • wangdq_1989
  • 2015年01月27日 08:22
  • 1086

c语言实现随机排列n个数

在C语言吧看到有人问这个问题,怎么随机排列1到100. 我的想法是随机生成1到100的数,逐个保存到长度为100的数组中,每次保存前遍历前面已经保存的数,如果出现重复,则舍弃这个随机数,重新生成,再遍...
  • u013213396
  • u013213396
  • 2015年02月05日 22:45
  • 3900

如何高效产生m个n范围内的不重复随机数(m<=n)

如何产生不重复的随机数?最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机 数比较,如果重复,就重新产生。这是个很笨的方法,且比较次数呈线性增长,越往后次数越多。其实这些 比较是多余的...
  • a316212802
  • a316212802
  • 2014年12月23日 22:14
  • 5458

MATLAB 生成随机整数 的各种方法以及实例

MATLAB提供了多种生成随机整数的方法,下面我们就着重介绍几种常用的方法。 方法一:rand() rand()函数常用来生成0-1之间的随机矩阵,那么我们完全也可以用来生成我们想要的任意大小...
  • zjxiaolu
  • zjxiaolu
  • 2015年03月11日 14:50
  • 909
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:随机产生N个整数,并对其进行排序,查找……
举报原因:
原因补充:

(最多只允许输入30个字)