无法理解C中的冒泡排序算法

时间:2015-06-08 07:47:38

标签: c algorithm bubble-sort

void BubbleSort(int a[], int array_size) {
  int i, j, temp;

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

使用冒泡排序算法,我们为什么要从第一个元素而不是第0个元素开始。我们看到有一个(++ i)和(++ j)。 这是唯一但我似乎无法掌握的代码。

3 个答案:

答案 0 :(得分:3)

for循环的行为与您的想法不同。最后一部分,此处++i++j在循环完成后执行,而不是之前的i++j++在这里完全相同。

for (
     i = 0; //First part, executed before the first loop
     i < (array_size - 1); //Second part, executed before each loop
     ++i //Last part, executed AFTER each loop
     )

答案 1 :(得分:2)

您从第0个元素开始。 ++ i只有你的代码才能在同一行上使用,而不是在for循环中使用:

  • ++我将增加i的值,然后返回递增的值。

    i = 1;  j = ++ i;  现在i = 2,j = 2

  • i ++将增加i的值,但返回我在增加之前保持的原始值。

    i = 1;  j = i ++;  现在i = 2但j = 1

答案 2 :(得分:0)

 void BubbleSort(int a[], int array_size)
{
int i, j, temp;
for (i = 0; i < (array_size ); i++)
{
    for (j = i+1; j < array_size ; j++ )
{
        if (a[i] > a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
}

我希望上面的代码比较容易理解。 如果您按照以下动画进行操作,可以更好地理解 bubble sort animation