题目:
构造一个包含若干随机数的整数数组并将它按从小到大顺序排序,
随机数的范围是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函数中将两个已排好序数组合并成一个排好序数组,重新采用排序算法并不是一个好的方法,因为效率较低。想想两个已经按身高排好队的队伍合并到一起的时候采用什么方法?
文章来源地址https://www.toymoban.com/news/detail-664989.html
代码:
#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;
}
文章来源:https://www.toymoban.com/news/detail-664989.html
到了这里,关于C++构造一个包含若干随机数的整数数组并将它按从小到大顺序排序,随机数的范围是0~max的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!