理解冒泡排序(算法)

时间:2015-11-22 23:14:53

标签: c++ algorithm bubble-sort

我试图了解所有交换算法中最简单的算法,即bubblesort。然而,我似乎对实际交换值的步骤感到困惑,例如考虑代码:

void bubbleSort(int arr[], int n) {

      bool swapped = true;

      int j = 0;

      int tmp;

      while (swapped) {

            swapped = false;

            j++;

            for (int i = 0; i < n - j; i++) {

                  if (arr[i] > arr[i + 1]) {

                        tmp = arr[i];

                        arr[i] = arr[i + 1];

                        arr[i + 1] = tmp;

                        swapped = true;

                  }

            }

      }

}

我们说我有一个这样的数字列表:

7 1 3 4 6 3 5

我想交换前两个值7和1:

按照我的逻辑,这就是我理解这段代码的方式:

设置临时变量等于7,所以

temp = 7;

将7设置为等于下一个值,所以

7 = 1;? 目前的清单是:

1 1 3 4 6 3 5
Where temp = 7

现在设置1等于temp,即7?     1 =临时;

So the list is now:
1 7 3 4 6 3 5 

我的理解是否正确?

2 个答案:

答案 0 :(得分:1)

首先,你似乎走在了正确的轨道上。

一些提示可帮助您在旅程中取得进一步进展。

了解标准模板库。有一个名为swap的函数,它完全按照它在锡上所说的那样。

其次使用容器。它们比C风格的数组更不容易出错。

最后这里是bubble sort explained via the medium of folk dancing

答案 1 :(得分:0)

在此代码段中

if (arr[i] > arr[i + 1]) {

      tmp = arr[i];

      arr[i] = arr[i + 1];

      arr[i + 1] = tmp;

      swapped = true;
}

您需要交换两个对象arr[i]arr[i + 1]

如果你直接写

      arr[i] = arr[i + 1];

然后这两个对象将具有相同的值,即arr[i]的前一个值将丢失。

首先,您需要在某处保留此值。为此,声明了一个辅助中间变量tmp

首先,arr[i]的值保留在变量tmp中 我们假设arr[i]的值为7,arr[i + 1]的值为1。

      tmp = arr[i];

现在tmparr[i]具有相同的值7。

然后arr[i]被arr [i + 1]

的值覆盖
      arr[i] = arr[i + 1];

现在这两个变量具有相同的值1,即arr[i + 1]

的值

我们tmp等于7,arr [i]和arr[i + 1]等于1

arr[i]的先前值保留在变量tmp中 现在,此值已分配给arr[i + 1]

      arr[i + 1] = tmp;

我们得到arr[i + 1]等于7,arr[i]等于tp 1

因此交换了价值。