冒泡算法中的小陷阱

  今天写了个冒泡算法从小到大排序的小程序。编译之后DOS界面出现了,但是会发生如下错误:

原部分代码如下:

View Code
int main(void)
{
sport a[
12]={{"001",13.6},{"002",14.8},{"010",12.0},
{
"011",12.7},{"023",15.6},{"025",13.4},
{
"031",14.9},{"036",12.6},{"037",13.4},
{
"102",12.5},{"325",15.3,{"438",12.7}};
sport temp;
int i,j;
int row=12;
/*冒泡排序算法*/
for(i=0; i<=row-1; i++)
for(j=0; j<row-i; j++)
{
if(a[j].grade > a[j+1].grade)
{
temp
= a[j];
a[j]
= a[j+1];
a[j
+1] = temp;
}
}

  

  相信一些大牛看到代码就会明白错在哪里了。原本啊a[0]位置出现不明字符,从而导致最高位被挤出数组范围。

     就这样慢慢看,最后找打原因所在---数组范围溢出。当i=0,j=11,会出现if(a[11].grade > a[12].grade)

     很明显a[12]是不存在的,从而访问溢出,用其他值给代替了。找到问题,修改就简单了:

    for(i=0; i<=row-1; i++)
for(j=0; j<row-i-1; j++)
{
if(a[j].grade > a[j+1].grade)
{
temp
= a[j];
a[j]
= a[j+1];
a[j
+1] = temp;
}
}

  结果如下:

结果正确。

     数组溢出是个常见的问题,没想到还是栽了,真要好好反省,也希望诸读者不要犯同样的错误!

原文地址:https://www.cnblogs.com/hackergodness/p/2171770.html