排序算法整理

本文详细介绍了冒泡排序算法的工作原理,即通过相邻元素的比较和交换逐步将最大值推至数组末尾。还讨论了冒泡排序的稳定性,并提供了JavaScript代码实现。为避免原数组被修改,提出了使用深拷贝创建新数组的方法,如扩展运算符或转换为字符串再转换回来。冒泡排序是一种基础排序算法,理解其原理对于学习更高级的排序算法至关重要。
摘要由CSDN通过智能技术生成

冒泡排序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 冒泡排序 -->
    <!-- 思想就是从第一个和相邻的作比较,若大则交换位置,以此类推,
        就会把最大的值放到了最后面,选出最大的值,第二次循环可以少循环一次,找到次最大,完成排序
    -->
    <script>
        let arr = [12,3,4,9,0,13,65,123]
        const mySort = function(arr){
            let arrlen = arr.length
            for(let i = 0 ;i<arrlen ; i++){               
                for(let j = 0 ;j<arrlen-i-1;j++){
                    if(arr[j]>arr[j+1]){
                        let temp = arr[j]
                        arr[j]=arr[j+1]
                        arr[j+1]=temp
                    }
                }
            }
            return arr
        }
        console.log(mySort(arr));
        console.log(arr);
    </script>
</body>
</html>

思想就是从第一个和相邻的作比较,若大则交换位置,以此类推,就会把最大的值放到了最后面,选出最大的值,第二次循环可以少循环一次,找到次最大,完成排序

值得注意的是:经过排序后原数组发送改变了

如何实现不改变原数组 的情况下进行排序呢

1.相当于深克隆一个数组,可以通过将一个数组赋值给另一个数组,扩展运算符[...arr]

或者用数组转字符串,在用字符串转回来。

let arr = [12,3,4,9,0,13,65,123]
        const mySort = function(Arr){
            let arr = [...Arr]
            let arrlen = arr.length
            for(let i = 0 ;i<arrlen ; i++){               
                for(let j = 0 ;j<arrlen-i-1;j++){
                    if(arr[j]>arr[j+1]){
                        let temp = arr[j]
                        arr[j]=arr[j+1]
                        arr[j+1]=temp
                    }
                }
            }
            return arr
        }
        console.log(mySort(arr));
        console.log(arr);

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值