linxuex

C++学习者

常用链接

统计

最新评论

请 教

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

void sort(long [])
{int i,j;
 long t;
 for(j=0;j<5;j++)
   for(i=0;i<5-j;;j++)
    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;j++)
  cout<<a[i]<<" ";
 cout<<endl<<endl;
}

void sort(int [])
{int i,j,t;
 for(j=0;j<5;j++)
   for(i=0;i<5-j;;j++)
    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;j++)
  cout<<a[i]<<" ";
 cout<<endl<<endl;
}

void sort(float [])
{int i,j;
 float t;
 for(j=0;j<5;j++)
   for(i=0;i<5-j;;j++)
    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;j++)
  cout<<a[i]<<" ";
 cout<<endl<<endl;
}

 
 //d:\c++6.0\vs63in1 (g)\vc60chs\vc98\include\ios(9) : fatal error C1083: Cannot open include file: 'streambuf.h': No such file or directory
Cpp1.obj - 1 error(s), 0 warning(s)  请问是什么原因?如何解决?
                                                                                                                    C++初学习者

posted on 2007-04-21 09:14 linxuex 阅读(839) 评论(13)  编辑 收藏 引用

评论

# re: 请 教 2007-04-21 09:48 pengkuny

函数定义时形参没有变量名  回复  更多评论   

# re: 请 教 2007-04-21 09:49 pengkuny

for(j=0;j<5;j++)到处copy,第三个j没有改成i
  回复  更多评论   

# re: 请 教 2007-04-21 09:51 pengkuny

像这种插入排序要注意排序的个数,是
for(j=0;j<4;j++) 不是j <5
否则后面a[i]>a[i+1]就越界了  回复  更多评论   

# re: 请 教 2007-04-21 09:52 pengkuny

算了,编译了一下:
#include "stdafx.h"
#include<iostream>
//#include<string>

using namespace std;

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

void sort(long a[])
{
int i,j;
long t;
for(j=0;j<4;j++)
{
for(i=0;i<4-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;
system("pause");
}

void sort(int a[])
{
int i,j,t;
for(j=0;j<4;j++)
{
for(i=0;i<4-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;
system("pause");
}

void sort(double a[])
{
int i,j;
double t;
for(j=0;j<4;j++)
{
for(i=0;i<4-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;
system("pause");
}  回复  更多评论   

# re: 请 教 2007-04-21 09:57 wzqxp2002

干吗不用模版哦?  回复  更多评论   

# re: 请 教 2007-04-21 14:38 linxuex

我觉得没越界j<5表示j取0,1,2,3,4可表示5个数
若j<4 j取0,1,2,3四个数
我调了一下你给的 没调出来



能不能帮我再调一下 谢谢!!!!!!!!!!!!!  回复  更多评论   

# re: 请 教 2007-04-21 14:49 tivili_chen

#include<iostream>
#include<string>
using namespace std;
void sort(long []);
void sort(int []);
void sort(float []);
int main()
{ long a[5]={10100, -123567, 1198783, -165654, 3456};
int b[5]={1,9,0,23,-45};
float c[5]={2.4f,7.6f,5.5f,6.6f,-2.3f};

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

void sort(long a[])
{int i,j;
long 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(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;
}

  回复  更多评论   

# re: 请 教 2007-04-21 15:36 pengkuny

for(j=0;j<5;j++)
{
for(i=0;i<5-j;i++)
{
if(a[i]>a[i+1])
...}
}
怎么没越界,j = 0, i = 4, a[i+1]越界a[5]!
我前面写错了, 外循环不要改, 改后如下:
for(j=0;j<5;j++)
{
for(i=0;i<4-j;i++) //内循环改一下
{
if(a[i]>a[i+1])
...}
}


我运行结果良好,怎么会调不出来  回复  更多评论   

# re: 请 教 2007-04-21 18:57 踏雪赤兔

怎么不写成template  回复  更多评论   

# re: 请 教 2007-04-22 09:11 jarod-pku

代码的毛病还是比较多的。

另外,VC6的库比较老,对"iostream"的支持不好。一般都是用.h的老库。

写成template要方便很多。
  回复  更多评论   

# re: 请 教 2007-04-22 10:13 chenger

用模板不是更好?
template <typename T>
void sort(T v[],int size)
{
for(int i = 0;i < size;++i)
{
for(int j = i;j < size - 1;++j)
{
if(a[j]>a[j+1])
swap(a[j],a[j+1]);//标准库里好像有这个函数
}
}
}

不知道对不对……这个sort,如果代码没错的话,可以适用于所有能够用<比较大小的类型,此外要支持赋值,总之要让swap函数能工作。当然,更好的办法是提供两个迭代器begin,end指明排序范围。建议楼主去看看STL里算法的实现。  回复  更多评论   

# re: 请 教 2007-04-27 11:03 sandy

for(j=0;j<5;j++)
for(i=j;i<5-j;i++)
if(a[i]>a[i+1])
这里出问题了
当j=0,i=4时,a[i+1]是哪个元素啊~这时不是越界了。
所以我感觉应该是这样写:
template <typename T>
void sort(T v[],int size)
{
for(int i = 0;i < size;++i)
for(int j = i;j < size - 1-i;++j)
if(a[j]>a[j+1])
swap(a[j],a[j+1]);//标准库里好像有这个函数
}

用模板写就省很多功夫了  回复  更多评论   

# re: 请 教 2007-04-28 20:59 pengkuny

内循环for(j=i; j<n-1-i; j++)的j至少要固定一端, 两端都与i相关,必错.
正解如下:
for(i=0; i<n; i++)//排序
{
for(j=0; j<n-1-i; j++)
{
if(x[j] > x[j+1])
{
swap(x[j],x[j+1]);//标准库函数
}
}
}  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理