用同一个函数名对n(n<=10)个数据进行从小到大排序,数据类型可以是整数、浮点数,用函数重载实现
输入格式:
输入n 例如 3
输入n个整数,例如 10 8 9
输入n个浮点数 例如 10.23 5.16 7.99
输出格式:
输出n个整数的升序排列:8 9 10
以空格间隔,并以空格结尾
换行,输出n个浮点数的升序排列:5.16 7.99 10.23
以空格间隔,并以空格结尾
#include<iostream>
using namespace std;
template<class T>
void swap(T &a,T &b)
{
T temp;
temp=a;
a=b;
b=temp;
}
void sort(int *a,int n)
{
for(int i=0;i<n;i++)
{
for(int j=i;j<n-i-1;j++)
{
if(a[j]>a[j+1])swap<int>(a[j],a[j+1]);
}
}
}
void sort(double *b,int n)
{
for(int i=0;i<n;i++)
{
for(int j=i;j<n-i-1;j++)
{
if(b[j]>b[j+1])swap<double>(b[j],b[j+1]);
}
}
}
int main()
{
int n;
cin>>n;
int a[n];
double b[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
cin>>b[i];
}
sort(a,n);
sort(b,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
for(int i=0;i<n;i++)
{
cout<<b[i]<<" ";
}
}
不知道问题出在哪里,编译说swap函数重载的调用模糊
试试换个函数名,可能已经有swap函数了,所以会重载
int destroy(struct node *head)
{
struct node *p; //定义结构体指针
if(head==NULL)//如果链表不存在则返回0
{
return 0;
}
while(head != 0)//如果存在则进行摧毁,直到head为空,所有节点被销毁
{
p = head->next;//把head指向的下一个节点被P保存
free(head);//释放掉head指向的节点
head = p;//把P保存的节点被head保存
}
};
我可以解决该问题。
首先,我们可以设计两个函数重载,一个函数用于对整数数据进行排序,一个函数用于对浮点数数据进行排序。两个函数的参数都是一个数组和数组的长度。其中,整数排序可以使用冒泡排序或者快速排序等算法,浮点数排序可以使用快速排序。
代码示例:
// 对整数数组进行排序(冒泡排序) void sort(int arr[], int n){ for(int i = 0; i < n-1; i++){ for(int j = 0; j < n-i-1; j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
// 对浮点数数组进行排序(快速排序) void sort(double arr[], int n){ if(n <= 1){ return; } double pivot = arr[n/2]; int i = 0, j = n-1; while(i <= j){ while(arr[i] < pivot){ i++; } while(arr[j] > pivot){ j--; } if(i <= j){ double temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; j--; } } sort(arr, i); sort(arr+i, n-i); }
接着,我们可以在主函数中输入n和n个整数、n个浮点数,并分别对它们进行排序,最后输出结果。完整代码如下:
using namespace std;
// 对整数数组进行排序(冒泡排序) void sort(int arr[], int n){ for(int i = 0; i < n-1; i++){ for(int j = 0; j < n-i-1; j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
// 对浮点数数组进行排序(快速排序) void sort(double arr[], int n){ if(n <= 1){ return; } double pivot = arr[n/2]; int i = 0, j = n-1; while(i <= j){ while(arr[i] < pivot){ i++; } while(arr[j] > pivot){ j--; } if(i <= j){ double temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; j--; } } sort(arr, i); sort(arr+i, n-i); }
int main(){ int n; cin >> n; int int_arr[n]; double double_arr[n]; for(int i = 0; i < n; i++){ cin >> int_arr[i]; } for(int i = 0; i < n; i++){ cin >> double_arr[i]; } sort(int_arr, n); sort(double_arr, n); for(int i = 0; i < n; i++){ cout << int_arr[i] << " "; } cout << endl; for(int i = 0; i < n; i++){ cout << double_arr[i] << " "; } return 0; }
输入示例:
5 4 2 5 1 3 2.3 1.5 3.7 4.2 1.2
输出示例:
1 2 3 4 5 1.2 1.5 2.3 3.7 4.2