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;
    }
    }

      结果如下:

    结果正确。

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

  • 相关阅读:
    php获取文件后缀名格式
    猴子分桃问题2
    猴子吃桃问题1
    判断字符串中字母出现的次数用分割法
    成绩表
    二维数组所有元素求和输出
    冒泡排序
    1.8作业
    1.8
    1.6
  • 原文地址:https://www.cnblogs.com/hackergodness/p/2171770.html
Copyright © 2011-2022 走看看