练习16,L题,排序函数重载
题目如下:
用同一个函数名对n(n<=10)个数据进行从小到大排序,数据类型可以是整数、浮点数,用函数重载实现
输入描述:
共3行,第一行输入一个整数n,第二行输入n个整数,空格分隔,第三行输入n个浮点数,空格分隔。
输出描述:
共两行,第一行,输出n个整数的升序排列,以空格间隔,并以空格结尾,第二行,输出n个浮点数的升序排列,以空格间隔,并以空格结尾
解决该问题,冒泡排序或者选择排序或者是插入排序一定要熟记,把这个函数放在void函数里,由于此题需要用函数重载,就得需要同一函数名,两个不同的函数,分别为int类型和double类型,代码如下:
void flag(int a[],int n) { for(int i = 0;i < n;i++) { for(int j = 0;j < n-1-i;j++) { if(a[j] > a[j+1]) { int b = a[j]; a[j] = a[j+1]; a[j+1] = b; } } } } void flag(double a[],int n) { for(int i = 0;i < n;i++) { for(int j = 0;j < n-1-i;j++) { if(a[j] > a[j+1]) { double b = a[j]; a[j] = a[j+1]; a[j+1] = b; } } } }
注意的是,第二个重载函数交换时的b变量一定要用double,否则后面输出的是整数类型
主函数比较简单,代码如下:
int main() { int n; cin >> n; int *a = new int[n]; double *b = new double[n]; for(int i = 0;i < n;i++) { cin >> a[i]; } for(int i = 0;i < n;i++) { cin >> b[i]; } flag(a,n); flag(b,n); for(int i = 0;i < n;i++) { cout << a[i] << " "; } cout << endl; for(int i = 0;i < n;i++) { cout << b[i] << " "; } delete[] a; delete[] b; return 0; }
总代码:
#include <iostream> #include<bits/stdc++.h> using namespace std; void flag(int a[],int n) { for(int i = 0;i < n-1;i++) { for(int j = 0;j < n-i-1;j++) { if(a[j] > a[j+1]) { int b = a[j]; a[j] = a[j+1]; a[j+1] = b; } } } } void flag(double a[],int n) { for(int i = 0;i < n-1;i++) { for(int j = 0;j < n-i-1;j++) { if(a[j] > a[j+1]) { double b = a[j]; a[j] = a[j+1]; a[j+1] = b; } } } } int main() { int n; cin >> n; int *a = new int[n]; double *b = new double[n]; for(int i = 0;i < n;i++) { cin >> a[i]; } for(int i = 0;i < n;i++) { cin >> b[i]; } flag(a,n); flag(b,n); for(int i = 0;i < n;i++) { cout << a[i] << " "; } cout << endl; for(int i = 0;i < n;i++) { cout << b[i] << " "; } delete[] a; delete[] b; return 0; }