C++输入十个数从小到大输出?

来源:百度知道 编辑:UC知道 时间:2024/06/01 12:23:37
#include <iostream>
using namespace std;
int main()
{ void t(int array[],int n);
int a[10],i;
cout<<"请输入十个整数:"<<endl;
for (i=0;i<10;i++) cin>>a[i];
t(a,10);
for (i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
return 0;
}
void t(int array[],int n)
{ int i,j,k;
for (i=0;i<n-1;i++)
{ k=i;
for (j=i+1;j<n;j++) if (array[j]<array[k]) k=j;
array[i]=array[i]+array[k];
array[k]=array[i]-array[k];
array[i]=array[i]-array[k];
}
}

这是用数组写的,不知道哪里错了。。。
一楼的那个我看明白了。我写的这个思路是先将10个数中的最小的给a[0],再将a[1]--a[9]中最小的给a[1],依次交换下去,还是看不出哪里错了。。。 一楼的思路跟我一样,只不过是后面比较一次就交换一次,我的是先找出最小的那个下标然后在交换

排序有问题
void t(int array[],int n)
{ int i,j,min;
for (i=0;i<n-1;i++)
{ min=i;
for (j=i+1;j<n;j++) if (array[j]<array[min]) min=j;
j=array[i];
array[i]=array[min];
array[min]=j;
}
}

---------
你的交换代码
用的是如下技巧
array[i]=array[i]+array[k];
array[k]=array[i]-array[k];
array[i]=array[i]-array[k];
这种方式在i和k不相等的时候是正确的。在代码前加上判断就行了
if(i!=k){
array[i]=array[i]+array[k];
array[k]=array[i]-array[k];
array[i]=array[i]-array[k];
}

我只改 了下行参 用 交换排序 , 不好意思 你的形参我看不懂

#include <iostream>
using namespace std;
int main()
{ void t(int array[],int n);
int a[10],i;
cout<<"请输入十个整数:"<<endl;
for (i=0;i<10;i++) cin>>a[i];
t(a,10);
for (i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;