【JavaScript】17_数组去重与两种常用排序算法及优化

220 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

10、数组去重

方法一、

改变原数组

在.splice()后,当arr[i] 和 arr[j]相同时,它会自动的删除j位置的元素,然后j+1位置的元素,会变成j位置的元素 而j位置已经比较过了,不会重复比较,所以会出现漏比较的情况 解决办法,当删除一个元素后,需要将该位置的元素在比较一遍,所以为 j--

    <script>
        const arr = [1,2,1,3,2,2,4,5,5,6,7]
​
        //分别获取数组中的元素
        for(let i = 0; i < arr.length ; i++){
            //获取当前值后边的所有值
            for(let j = i + 1; i < arr.length; j++){
                //判断两个数是否相等
                if(arr[i] === arr[j]){
                    //出现了重复元素,删除后边的元素即可
                    arr.splice(j,1)
                    j--
                }
            }
        }
        console.log(arr)
    </script>

方法二、

新建一数组

    <script>
        const arr = [1, 2, 1, 3, 2, 2, 4, 5, 5, 6, 7]
        const newArr = []
​
        for(let ele of arr){
            if(newArr.indexOf(ele) === -1){
                newArr.push(ele)
            }
        }
​
        console.log(newArr)
    </script>

11、排序

思路一:

冒泡排序

9, 1, 3, 2, 8, 0, 5, 7, 6, 4

  • 比较相邻的两个元素,然后根据大小来决定是否交换它们的位置
  • 例子: 第一次排序:1, 3, 2, 8, 0, 5, 7, 6, 4, 9 第二次排序:1, 2, 3, 0, 5, 7, 6, 4, 8, 9 第三次排序:1, 2, 0, 3, 5, 6, 4, 7, 8, 9 ... 倒数第二次 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • 这种排序方式,被称为冒泡排序,冒泡排序是最慢的排序方式, 数字少还可以凑合用,不适用于数据量较大的排序
<script>
    const arr = [9, 1, 3, 2, 8, 0, 5, 7, 6, 4]
    for (let j = 0; j < arr.length - 1; j++) {
        for (let i = 0; i < arr.length - 1; i++) {
            // arr[i] 前边的元素 arr[i+1] 后边元素
            if (arr[i] < arr[i + 1]) {
                // 大数在前,小数在后,需要交换两个元素的位置
                let temp = arr[i] // 临时变量用来存储arr[i]的值
                arr[i] = arr[i + 1] // 将arr[i+1]的值赋给arr[i]
                arr[i + 1] = temp // 修改arr[i+1]的值
            }
        }
    }
​
    console.log(arr)
</script>

冒泡优化

    <script>
        const arr = [9,1,3,2,8,9,0,5,7,6,4]
        //使用优化后的冒泡排序-----内层循环条件变为length-1-j;呈斜线减少查询次数
         for(let j = 0; j < arr.length -1; j++){
             for (let i = 0; i < arr.length - 1 - j; i++) {
                 if (arr[i] > arr[i + 1]) {
                     let temp = arr[i] 
                     arr[i] = arr[i + 1]
                     arr[i + 1] = temp
                 }
             }
            console.log(arr)
         }
    </script>

思路2: 9, 1, 3, 2, 8, 0, 5, 7, 6, 4

  • 取出一个元素,然后将其他元素和该元素进行比较,如果其他元素比该元素小则交换两个元素的位置
  • 例子: 0, 9, 3, 2, 8, 1, 5, 7, 6, 4 0, 1, 9, 3, 8, 2, 5, 7, 6, 4 0, 1, 2, 9, 8, 3, 5, 7, 6, 4 ...

选择排序

    <script>
        for(let i=0; i<arr.length; i++){
            for(let j=i+1; j<arr.length; j++){
                if(arr[i] > arr[j]){
                    // 交换两个元素的位置
                    let temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp
                }
            }
​
        }
        console.log(arr)
    </script>