c++编一个程序,用同一个函数名对n个数据进行从小到大排序。要注释

编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型和双精度型。
#include <iostream>
#include <string>
using namespace std;
int main()
{ int a[5]={1,9,0,23,-45};
float b[5]={2.4, 7.6, 5.5, 6.6, -2.3 };
long int c[5]={10100,-123567, 1198783,-165654, 3456};
void sort(int []);
void sort(float []);
void sort(long []);
sort(a);
sort(b);
sort(c);
return 0;
}

void sort(int a[])
{int i,j,t;
for (j=0;j<5;j++)
for(i=0;i<5-j;i++)
if (a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
cout<<"the sorted numbers :"<<endl;
for(i=0;i<5;i++)
cout<<a[i]<<" ";
cout<<endl<<endl;
}

void sort(float a[])
{int i,j;
float t;
for (j=0;j<5;j++)
for(i=0;i<5-j;i++)
if (a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
cout<<"the sorted numbers :"<<endl;
for(i=0;i<5;i++)
cout<<a[i]<<" ";
cout<<endl<<endl;
}

void sort(long a[])
{int i,j,min;
long t;
for(i=0;i<5;i++)
{min=i;
for (j=i+1;j<5;j++)
if(a[min]>a[j]) min=j;
t=a[i]; a[i]=a[min];a[min]=t; }
cout<<"the sorted numbers :"<<endl;
for(i=0;i<5;i++)
cout<<a[i]<<" ";
cout<<endl<<endl;
}
帮我看看这个对嘛?对的话帮我注释一下。

//这个问题用函数模板应该能更方便的解决
//因为排序的算法是一致的,只是类型不同而已
//你不妨复制去试一试,我运行过了,没问题
//百度知道自动缩减空白,搞得注释紧贴着代码,有点乱,将就着看吧
#include<iostream>
using namespace std;
template <typename Type> //声明函数模板
void sort(Type* cp);
int main()
{
int a[5]={1,9,0,23,-45};
float b[5]={2.4, 7.6, 5.5, 6.6, -2.3 };
long int c[5]={10100,-123567, 1198783,-165654, 3456};

sort(a);
sort(b);
sort(c);cin.get();
return 0;
}

template <typename Type> //函数模板定义
void sort(Type* cp)//当调用sort(a)时,Type=int,cp就是int*,指向int的指针
{ //a 是int数组名,也是指向int的指针
int i,j; //所以参数匹配
Type temp;
for(i=0;i<4;i++) //这是经典的冒泡排序算法,很清晰
{
for(j=0;j<4;j++) //内循环中,每次循环,大的数将会向后移一个位置
{ //小的数将会向前移一个位置
if(cp[j]>cp[j+1])//当有n个数的时候,循环n-1次(这里5个数,循环4次)
{temp=cp[j]; //可以确保将每个数都比较一次
cp[j]=cp[j+1];
cp[j+1]=temp;} //外循环也为n-1次,确保每个数都可以移动n-1次
} //外循环进行n-1次,小的数字将一点一点向前移动
//同时大的数字也向后移动,
} //这将确保在外循环进行n-1次之后,每个数字都到自己指定的位置
for(i=0;i<5;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-15
1.你的程序没什么问题,如果说有点问题的话,最好把float改为double类型,因为5.5..是常double类型,但是不改也可以,因为这里float类型的精度已经足够了。
double b[5]={2.4, 7.6, 5.5, 6.6, -2.3 };

2.另外,你的程序还应该注意编码规范:每个for()循环后最好用大括号{}括起来,这样程序结构才清晰。if..else等语句也最好加{}。

2.这个程序的目的是学习C++的函数模板,实现函数重载,参看下面程序,是不是简便多了?

#include <iostream>
using namespace std;

template <class T> //定义函数模板,T相当于“通用数据类型”
void sort(T a[])
{
int i,j;
T t;
for (i=0;i<5;i++) //排序
{
for(j=0;j<5;j++)
{
if (a[i]<a[j])
{
t=a[i]; a[i]=a[j]; a[j]=t;
}
}
}
cout<<"the sorted numbers :"<<endl;
for(i=0;i<5;i++) //输出
{
cout<<a[i]<<" ";
}
cout<<endl<<endl;
}

int main()
{
int a[5]={1,9,0,23,-45};
double b[5]={2.4,7.6,5.5,6.6,-2.3};
long int c[5]={10100,-123567,1198783,-165654,3456};
sort(a);
sort(b);
sort(c);
return 0;
}
第2个回答  2009-03-14
对不对,上机试一试不就知道了。
这是C++中的基本用法。

粗看了下,你的程序问题蛮多的。

void sort(int *p);
void sort(float *p);
void sort(long *p);

int main()
{
int a[5]={1,9,0,23,-45};
float b[5]={2.4, 7.6, 5.5, 6.6, -2.3 };
long int c[5]={10100,-123567, 1198783,-165654, 3456};

sort(a);
sort(b);
sort(c);
return 0;
}

。。。
去上机试一试
第3个回答  2009-03-14
#include<iostream>
#include<stdlib.h>
using namespace std;
void sort(int *);
void sort(float *);
void sort(double *);
int n;
int main()
{int i;
cout<<"输入n:"<<endl;
cin>>n;
int *p= (int *)malloc(n*sizeof(int));
float *q= (float *)malloc(n*sizeof(float));
double *r=(double *)malloc(n*sizeof(double));
cout<<"输入int类n个元素:"<<endl;
for(i=0;i<n;i++)
cin>>p[i];
cout<<"输入float类n个元素:"<<endl;
for(i=0;i<n;i++)
cin>>q[i];
cout<<"输入double类n个元素:"<<endl;
for(i=0;i<n;i++)
cin>>r[i];
sort(p);
sort(q);
sort(r);
delete []p;
delete []q;
delete []r;
return 0;
}
void sort(int *cp)
{
int i,j;
int temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(cp[j]>cp[j+1])
{temp=cp[j];
cp[j]=cp[j+1];
cp[j+1]=temp;}
}
for(i=0;i<n;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
void sort(float *cp)
{
int i,j;
float temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(cp[j]>cp[j+1])
{temp=cp[j];
cp[j]=cp[j+1];
cp[j+1]=temp;}
}
for(i=0;i<n;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
void sort(double *cp)
{
int i,j;
double temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(cp[j]>cp[j+1])
{temp=cp[j];
cp[j]=cp[j+1];
cp[j+1]=temp;}
}
for(i=0;i<n;i++)
cout<<cp[i]<<" ";
cout<<endl;
}
第4个回答  2009-03-14
程序应该是对的。。
相似回答