美文网首页
冒泡、插入、选择排序

冒泡、插入、选择排序

作者: charoner | 来源:发表于2019-07-27 23:46 被阅读0次

    冒泡排序

    思路

    • 冒泡排序只需要比较相邻的两个数据
    • 每次冒泡都需要对比较相邻两个数据的大小,如果不满足大小关系就让它们互换位置
    • 一次冒泡至少能让一个数据移到它应该在的位置,重复n次就完成了n个数据的排序
    let arr = [7,10,6,3,5,2,9,4,8,1]
    
    const Bubbling = arr => {
        let length = arr.length - 1
        //冒泡length次
        for (let i = 0; i < length; i++) {
            let bool = true //提前突出的标志位
            //循环比较(length-i)次
            for (let j = 0; j< length-i; j++) {
                //比较相邻元素的大小 前一个元素 > 后一个元素则替换位置
                if (arr[j] > arr[j+1]) {
                    let temp = arr[j]
                    arr[j] = arr[j+1]
                    arr[j+1] = temp
                    bool = false
                }
            }
            //当前冒泡循环中没有发生元素替换 说明当前冒泡后数据已经排序成功 提前退出
            if (bool) break
        }
    }
    
    Bubbling(arr)
    
    

    优化: 当某次循环中比较完所有相邻数据后还未替换位置 说明当前排序已经完成所有通过添加一个bool标志位 符合条件时提前退出循环比较

    插入排序

    • 从第一个元素开始,该元素可以认为已经被排序
    • 取出下一个元素,在已经排序的元素序列中从后向前扫描
    • 如果该元素大于新元素,将该元素移到下一位置
    • 重复比较后直到找到已排序的元素小于或等于新元素的位置
    • 将新元素插入到该位置后 重复2~5
    let arr = [7,10,6,3,5,2,9,4,8,1]
    
    const insertionSort = arr => {
        let length = arr.length
        if (length <= 1) return
    
        let preIndex, current
        for (let i = 1; i < length; i++ ) {
            preIndex = i-1
            current = arr[i]
            while (preIndex >= 0 && arr[preIndex] > current ) {
                arr[preIndex + 1] = arr[preIndex]
                preIndex--;
            }
            if (preIndex + 1 != i){
                arr[preIndex + 1] = current
            }
            console.log(arr)
        }
    }
    
    insertionSort(arr)
    

    选择排序

    • 首先在未排序序列中找到最小元素,存放到排序序列的起始位置。
    • 再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。
    • 重复第二步,直到所有元素均排序完毕
    const selectionSort = arr => {
        let length = arr.length
        if (length <= 1) return
    
        let minIndex, temp
        for (let i = 0; i < length-1 ; i++) {
            minIndex = i
            current = arr[i]
           for (let j = i+1; j<length; j++) {
               if (arr[j] < arr[minIndex]) {
                   minIndex = j
               }
           }
           temp = arr[i]
           arr[i] = arr[minIndex]
           arr[minIndex] = temp
        }
        return arr 
    }
    
    selectionSort(arr)
    

    相关文章

      网友评论

          本文标题:冒泡、插入、选择排序

          本文链接:https://www.haomeiwen.com/subject/nihyrctx.html