冒泡排序中,数组打印异常:为什么在元素交换前后打印数组时,结果不一致?

DDD
发布: 2024-11-05 12:06:29
原创
658人浏览过

冒泡排序中,数组打印异常:为什么在元素交换前后打印数组时,结果不一致?

冒泡排序中,数组打印异常

在尝试编写冒泡排序算法时,发现了一个奇怪的现象。在元素交换前和交换后打印数组时,数组结构出现了不同。

具体代码如下:

// 元素交换位置前打印
function bubbleSort(array) {
    for (let i = 0; i < array.length - 1; i++) {
        for (let j = i + 1; j < array.length; j++) {
            if (array[j] < array[i]) {
                const oldArr = JSON.parse(JSON.stringify(array));
                console.log(oldArr);

                // [1, 3, 6, 3, 23, 1, 34]
                // [1, 1, 6, 3, 23, 3, 34]
                // [1, 1, 3, 6, 23, 3, 34]
                // [1, 1, 3, 3, 23, 6, 34]
                [array[i], array[j]] = [array[j], array[i]];
            }
        }
    }
}

// 元素交换位置后打印
function bubbleSort(array) {
    for (let i = 0; i < array.length - 1; i++) {
        for (let j = i + 1; j < array.length; j++) {
            if (array[j] < array[i]) {
                const oldArr = JSON.parse(JSON.stringify(array));
                [array[i], array[j]] = [array[j], array[i]];

                console.log(oldArr);
            }
        }
    }
}
登录后复制

在元素交换前打印时,打印出交换前的数组;而在元素交换后打印时,却打印出交换后的数组。

原因:

出现这种现象的原因是,在使用解构赋值 [] 调换元素位置时,会产生一个返回值。在未用分号 ; 隔开的情况下,这个返回值被赋值给了 oldArr。

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

阿里云-虚拟数字人 2
查看详情 阿里云-虚拟数字人

因此,在元素交换前打印时,oldArr 存储的是交换前的数组,而在元素交换后打印时,oldArr 存储的是交换后的数组,导致了两次打印出现不同的结果。

解决方法:

可以通过在解构赋值后加上分号,将返回值与赋值语句分开,从而避免此问题。

以上就是冒泡排序中,数组打印异常:为什么在元素交换前后打印数组时,结果不一致?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号