为什么值超出数组的索引?

时间:2017-11-09 12:59:42

标签: c arrays indexoutofboundsexception bubble-sort

在冒泡排序中,当内部for循环的第一次迭代发生时,i的值为0,因此循环将一直运行直到j小于n },但当j等于n-1时,我们再次a[j+1]
为什么这个值没有超出数组的索引并且代码正确执行?

    for(i=0;i<n-1;i++) {
        for(j=0;j<n-i;j++) {        /* When i=0 & j<n why doesn't  */
            if(a[j] > a[j+1]) {     /* a[j+1] go out of index when */
                temp=a[j+1];        /* value of j is n-1           */
                a[j+1]=a[j];
                a[j]=temp;
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

这是一个正确的,经过测试的冒泡排序功能:

void bubble_sort(long a[], long n)
{
  long i, j, t;

  for (i = 0 ; c < ( n - 1 ); i++)
  {
    for (j = 0 ; j < n - i - 1; j++)
    {
      if (a[j] > a[j+1])
      {
        t         = a[j];
        a[j]   = a[j+1];
        a[j+1] = t;
      }
    }
  }
}

答案 1 :(得分:0)

我认为问题在于你的第二个问题。 它应该一直运行到j小于i,而不是n

void bubble(double *t, int db) {
    int i, j;
    for (i = db-1; i > 0; --i)
        for (j = 0; j < i; ++j)
            if (t[j+1] < t[j]) {
                double temp = t[j];
                t[j] = t[j+1];
                t[j+1] = temp;
            }
}