用同一个函数名对n(n<=10)个数据进行从小到大排序,数据类型可以是整数、浮点数,用函数重载实现
输入描述:
共3行,
第一行输入一个整数n,
第二行输入n个整数,空格分隔,
第三行输入n个浮点数,空格分隔。
输出描述:
共两行,
第一行,输出n个整数的升序排列,以空格间隔,并以空格结尾
第二行,输出n个浮点数的升序排列,以空格间隔,并以空格结尾
示例:
输入:
3
3 2 1
2.3 4.5 1.1
输出:
1 2 3
1.1 2.3 4.5
思路:首先输入两组数据,分别保存进两个数组,这里定义两块连续的动态内存,用指针q1,q2指向,再利用函数重载写两个同名函数,函数形参的类型不同,函数代码部分,用冒泡排序完成题目要求,返回值类型为void。
注意:q1与q2为指针,所以在传参的时候可以用引用传递,则可以改变实参的值,或者在定义形式参数的时候定义二级指针,接收q1与q2的地址,也可以改变实参的值。
#include<stdio.h>
#include<iostream>
using namespace std;
void sort(int* &p, int n)
{
int temp;
for (int i = 0; i < n-1; i++)
{
for (int j = 0; j <= n - 2; j++)
{
if (p[j] > p[j + 1])
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
void sort(double* &p, int n)
{
double temp;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j <= n - 2; j++)
{
if (p[j] > p[j + 1])
{
temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
int main()
{
int n;
cin >> n;
int*q1 = new int[n];
double*q2 = new double[n];
for (int i = 0; i < n; i++)
{
cin >> q1[i];
}
for (int i = 0; i < n; i++)
{
cin >> q2[i];
}
sort(q1, n);
sort(q2, n);
for (int i = 0; i < n; i++)
{
printf("%d ", q1[i]);
}
printf("\n");
for (int i = 0; i < n; i++)
{
cout << q2[i] << ' ';
}
printf("\n");
delete[]q1;
delete[]q2;
return 0;
}