zoukankan      html  css  js  c++  java
  • 冒泡算法中的小陷阱

      今天写了个冒泡算法从小到大排序的小程序。编译之后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;
    }
    }

      结果如下:

    结果正确。

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

  • 相关阅读:
    使用NPOI将TABLE内容导出到EXCEL
    如何判断一个指定的经纬度点是否落在一个多边形区域内?
    SQL随记(三)
    SQL随记(二)
    SQL随记(一)
    微信开发(1)
    关于面试经验的总结
    动态代理是什么
    集合的遍历以及在Spring中的注入
    向服务器发送邮件(四)
  • 原文地址:https://www.cnblogs.com/hackergodness/p/2171770.html
Copyright © 2011-2022 走看看