【问题标题】:C# Bubble sort error? [duplicate]C#冒泡排序错误? [复制]
【发布时间】:2017-12-28 14:12:45
【问题描述】:

这里有什么问题?我有一个包含 2500 个随机数的块,我想用冒泡排序对它们进行排序。但是当我运行程序时,我得到了这个:

System.IndexOutOfRangeException

之后的错误代码:

if (szamok[i] > szamok[i + 1]).

(抱歉英语不好:/)

        int r = 2500;
        int seged;


        while (r > 1)
          {
              for (int i = 0; i < 2500; i++)
               {
                if (szamok[i] > szamok[i + 1])
                  {
                    seged = szamok[i + 1];
                    szamok[i + 1] = szamok[i];
                    szamok[i] = seged;
                   }

               }
            r = r - 1;
          }

【问题讨论】:

  • 如果2500是集合的大小,那么for中的条件应该是i &lt; 2500 - 1;:for (int i = 0; i &lt; 2500 - 1; i++) {...}
  • 抛出异常时i的值是多少,szamok中有多少条目?一些简单的调试应该会告诉您无效索引是什么,然后您就可以确定问题出在哪里。
  • 如果数组中有 2500 个项目,则它们出现在索引 0-2499 处。当i = 2499 时,您的代码最后一次通过其循环生成哪些索引?

标签: c# bubble-sort


【解决方案1】:

错误说明:您的索引超出范围。您试图在此数组中的最后一个元素之后访问数组中的元素。

szamok[i] &gt; szamok[i + 1] 行似乎是罪魁祸首。 +1 太多了。

尝试改变你的循环,这样你就不会访问最后一个元素,而只会访问倒数第二个元素:

for (int i = 0; i &lt; (2500-1); i++)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2014-03-26
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多