【问题标题】:What is the use of the outer loop (i loop) in the bubble sort algorithm?冒泡排序算法中的外循环(i循环)有什么用?
【发布时间】:2021-05-11 02:56:09
【问题描述】:
    int main() {
        int arr[5];
        for ( int i = 0; i < 5; i++) {
            cin>>arr[i];
        }
        for (int i = 0; i < 5; i++) {
            for ( int j = 1; j < 5; j++) {
                if ( arr[j] < arr[j-1]) swap(arr[j], arr[j-1]);
            }
        }
        
        for( int i = 0; i < 5; i++) cout<<" "<<arr[i]<<" "<<endl;
    }
    
    /* take an element then if the adjacent element is smaller, replace it with that and repeat this process */

我尝试删除 j 循环并将 j, j-1 替换为 i, i-1 但它会引发我无法弄清楚的错误,这是冒泡排序算法。我想了解那里的两个循环有什么用。

【问题讨论】:

  • 这里需要2个循环,因为内部循环只保证索引范围[0, 4 - i]中的最大元素移动到索引4-i。其余元素的顺序可能根本不会改变(只考虑最大元素在索引 0 处的情况)
  • 我建议您尝试在每个内部循环之后打印输出。您将意识到内部循环仅将元素按降序排列。

标签: c++ algorithm sorting data-structures bubble-sort


【解决方案1】:

冒泡排序算法包括将每个数字下沉直到它到达它的位置。为此,内部循环(j 循环)交换每对相邻的数字。为确保对完整列表进行排序,您需要重复此过程特定次数。

在最坏的情况下(倒序),算法必须重复交换过程至少 n 次(列表中每个元素一个),外部循环(i 循环)负责处理。

因此,内循环(j 循环)交换相邻元素对,外循环(i 循环)确保交换过程至少重复 n 次。 (如果列表在外循环达到 n 次迭代之前排序,您可以停止算法以节省时间)。

【讨论】:

    【解决方案2】:

    这种冒泡排序算法的工作原理如下:找到最大值的元素,并将其放在arr 列表的末尾。然后找到具有最大值的下一个元素,并将其放在前一个值之前。 等等,等等。

    删除第二个for 循环(带有j 的那个),意味着您只会找到第一个最大值一次,并将其放在末尾。

    因此,第二个for 循环的用途是找到每个下一个最大值,并将它们按顺序排列。

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 1970-01-01
      • 2016-08-31
      • 2017-01-25
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2020-07-22
      相关资源
      最近更新 更多