微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

冒泡排序算法中的外循环i循环有什么用?

如何解决冒泡排序算法中的外循环i循环有什么用?

    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 但它引发了一个我无法弄清楚的错误,这是冒泡排序算法。我想了解那里的两个循环有什么用处。

解决方法

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

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

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

,

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。