#include <iostream>
#include <bits/stdc++.h>
using namespace std;
double sordt(double a[],int n)
{
double temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
int sordt(int a[],int n)
{
for (int i = 0; i < n; i++)
{
int k= i;
for (int j = i + 1; j < n; j++)
{
if (a[k] > a[j])
k = j;
}
swap(a[i], a[k]);
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
int main()
{
int n;
double a[n];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sordt( a, n);
return 0;
}
两个问题:
问题一:
动态数组是C++的新特性,有的编译器不支持,所以,double a[n]这种写法不一定正确,可以用以下两种方式代替:
第一种方法:
int n;
double a[10000]; //这里直接申请一个大数组
cin >> n; //n表示数组中元素的实际个数
第二种方法:
int n;
cin >> n; //输入元素的个数
double* a = new double[n]; //申请n个空间
问题二:
两个sordt函数都有返回值,第一个函数返回值是double类型,第二个sordt函数返回值是int类型,但是你的函数中都没有return。解决方法有两种:
一是:在函数的最后都加一句return 0;
二是:把两个函数的返回值类型都改成void
一开始定义a[n] 你还没输入n
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
double sordt(double a[],int n)
{
double temp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
int sordt(int a[],int n)
{
for (int i = 0; i < n; i++)
{
int k= i;
for (int j = i + 1; j < n; j++)
{
if (a[k] > a[j])
k = j;
}
swap(a[i], a[k]);
}
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
int main()
{
int n;
double a[1000];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sordt( a, n);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!