但是我从大到小排序,程序是没问题的,可以运行,但是从小到大排序程序就出问题了!
以下是源代码:
#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就越界了。
恩恩,非常感谢!!