关于c++的问题,如何解决?

用同一个函数名对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函数了,所以会重载

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/703306
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。
  • 除此之外, 这篇博客: 创建N个单向链表对它进行摧毁和清空操作中的 摧毁链表实例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 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保存
        }   
    
    };
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以解决该问题。

    首先,我们可以设计两个函数重载,一个函数用于对整数数据进行排序,一个函数用于对浮点数数据进行排序。两个函数的参数都是一个数组和数组的长度。其中,整数排序可以使用冒泡排序或者快速排序等算法,浮点数排序可以使用快速排序。

    代码示例:

    // 对整数数组进行排序(冒泡排序) 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个浮点数,并分别对它们进行排序,最后输出结果。完整代码如下:

    include

    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