Val*_*s S 1 c++ sorting bubble-sort
泡泡排序算法最常见的方法是有两个for循环.内部一个从j = 0到j ni-1完成.我假设我们减去负i,因为当我们到达最后一个元素时,我们不比较它,因为我们之后没有一个元素.但为什么我们使用n-1.为什么我们不从i = 0运行外循环直到i <n并且从j = 0到ni?有人可以向我解释一下,互联网上的教程并没有强调这一点.
for (int i = 0; i < n - 1; i++) // Why do we have n-1 here?
{
swapped = false;
for (int j = 0; j < n - i - 1; j++)
{
countComparisons++;
if (arr[j] > arr[j + 1])
{
countSwaps++;
swap(&arr[j], &arr[j + 1]);
swapped = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
例如,如果我有一个包含6个元素的数组,为什么我只需要进行5次迭代?
小智 10
为了在数组中进行比较,需要两个相邻的单元格;在 6 个元素的数组中,您只进行 5 次比较;在包含 10 个元素、9 个比较等的数组中:
所以对于 7 个元素,只进行了 6 次比较,因此外部for循环中 n-1 的一般规则
关于n-1-i表达式,请记住冒泡排序中的最高(或最低,取决于排序标准)值在第一个循环后到达数组中的最后位置,因此无需比较该值与其他任何东西一样,因此数组必须一次“缩短”1 个单元格,并且外循环中i的值是负责内循环中的计数器:
5 | 3 | 9 | 20 | 元素 (n) = 4
在第一个循环 ( i = 0 ) 之后, 20 已到达数组中的正确位置(使用升序),留下一个包含 3 个元素的数组来进行比较;在下一个循环中,i将等于 1,并且由于 n-1 保持不变,我们需要在该表达式中减去 1 以“缩短”数组:n-1-i = 4-1-1 = 2,即是该新数组中最后一个元素的索引以及所需的比较数量。
希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |