大家帮忙看下这个c++小程序,这是我写的一个c++模板函数(数值排序)

但是我从大到小排序,程序是没问题的,可以运行,但是从小到大排序程序就出问题了!
以下是源代码:
#include<iostream.h>
template<class T>
sort()
{
int length;
int i;
int j;
T tempt;
T *array;
cout<<"请输入要排序的元素个数"<<endl;
cin>>length;
array=new T[length];
cout<<"请输入要排序的元素(注意是同一类型)"<<endl;
for(i=0;i<length;i++)
{
cin>>array[i];
}
cout<<"以下为排序前元素"<<endl;
for(i=0;i<length;i++)
{
cout<<array[i]<<endl;
}
for(i=0;i<=length-1;i++)
{
for(j=0;j<length-i;j++)
if(array[j]<array[j+1])
{
tempt=array[j];
array[j]=array[j+1];
array[j+1]=tempt;
}
}
cout<<"以下为排序后的元素"<<endl;
for(i=0;i<length;i++)
{
cout<<array[i]<<endl;
}
delete []array;
return 0;
}
void main()
{
sort<int>();
}
以下是从大到小排序结果

以下是从小到大排序就出错了

这到底是怎么回事啊,希望大家帮忙指导下,谢谢了

数组越界访问。
i = 0 时候, j < length - i 就是j < length j+1 < length +1 j+1 越界追问

?不懂,你能说清楚点么?

追答

也就是说你的元素是三个。你的双重循环中:可能取值第四个元素。越界访问。吧j a[j -1]) / /符号看你需要递增排序还是递减
用 a[j-1] 有个好处。就是j是最大的范围 j < length 就保障不会越界。
而你的: j = 0; j < length - i ;++j
j可能取到最后的元素,但是j+1就越界了。

追问

恩恩,非常感谢!!

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网