C++构造一个包含若干随机数的整数数组并将它按从小到大顺序排序,随机数的范围是0~max

题目:

构造一个包含若干随机数的整数数组并将它按从小到大顺序排序,

随机数的范围是0~max,要求必须包含下列函数。

(1)int* random(int n,int max) 

 random方法根据参数n和max产生一个有n个随机整数的动态数组,每个随机数的范围是0~max。

 random的返回值是产生的动态数组的起始地址。

(2)void sort(int a[],int n)

     sort函数将有n个元素的数组排序

(3)void output_array(int a[],int n)

     output_array函数输出有n个元素的数组

(4) int* merge(int x[],int y[],int m,int n)

      merge函数将两个已排好序数组合并成一个排好序数组并返回该数组的起始地址。

(5)main函数如下:

     void main()

     {

int *x,m=10,i,*y,*z,n=20;

        x=random(m,100);

y=random(n,100);

        sort(x,m);

sort(y,n);   

        output_array(x,m);

        output_array(y,n); 

z=merge(x,y,m,n);

output_array(z,m+n);

delete []x;

delete []y;

delete []z;

     }

要求提示:产生随机数用rand()函数,要在程序前写#include <cmath>,C++和C语言的头文件不同

      产生动态数组需要用到new和delete。

      merge函数中也需要产生一个新的动态数组,这个数组用来存放两个数组合并后的数据

     merge函数中将两个已排好序数组合并成一个排好序数组,重新采用排序算法并不是一个好的方法,因为效率较低。想想两个已经按身高排好队的队伍合并到一起的时候采用什么方法?

 

 

代码:

#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace std;

int *random(int n, int max)
{	int i;
	int *d=new int [n];
	srand((int)rand());
	for (i = 0; i < n; i++)
	{	d[i] = rand() % 100;
	}
	for (i = 0; i < n; i++)
	{	cout << d[i] << " ";
	}
	return d;
}

void sort(int *d, int n)
{	int i, j, t;
	for (i = 0; i < n ; i++)
	{	for (j = 0; j < n - 1 - i; j++)
		{	if (d[j] > d[j + 1])
			{	t = d[j];
				d[j] = d[j + 1];
				d[j + 1] = t;
			}
		}
	}
}

void output_array(int a[], int n)
{	int i;
	for (i = 0; i < n; i++)
	{	cout << a[i] << " ";
	}
}

int*merge(int n,int m,int a[],int b[])
{
	int i=0,j=0,k=0;
	int *p=new int [30];
	while(i<20&&j<10)
	{
		if(a[i]<=b[j])
		{
			p[k]=a[i];
			i++;
			k++;
		}
		else
		{
			p[k]=b[j];
			j++;
			k++;
		}
	}
	for(i;i<n;i++)
	{
		p[k]=a[i];

		k++;
	}
	for(j;j<m;j++)
	{
		p[k]=b[j];
		k++;
	}
	return p;
}
int main()
{	int *x, *y,*z,m = 10, n = 20;
	x = random(n, 100);
	cout << endl;
	cout << "-------------" << endl;
	y = random(m, 100);
	cout << endl;
	cout << "-------------" << endl;
	sort(x, n);
	cout<<endl;
	sort(y,m);
	output_array(y,m);
	cout << endl;
	cout << "-------------" << endl;
	output_array(x, n);
	cout << endl;
	cout << "-------------" << endl;
	z=merge(n,m,x,y);
	output_array(z,m+n);
	cout<<endl;
	delete []x;
	delete []y;
	delete []z;
	return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值