前端学习笔记(16)之BubbleSort、SelectionSort、CountSort

冒泡、选择、计数 排序

BubbleSort

双层for循环,一层减一次。
里层减外层,变量相交换。

        var arr = new Array(45, 65, 12, 48, 23, 18, 89)

        for (var i = 0; i < arr.length - 1; i++) {
            for (var j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    var temp = arr[j]
                    arr[j] = arr[j + 1]
                    arr[j + 1] = temp
                }
            }
        }
        console.log(arr)

SelectionSort

假设第一个最小,用第一个和后边的全部比较确认一遍,如果有更小的就置换一下。然后第一个就成为真正的最小的,再假设第二个是最小的和后边的比较,重复之前的流程。

        var arr = new Array(12,56,48,32,14)
        for(var i = 0 ; i < arr.length - 1;i++){
            var minIndex = i
            for(var j = i+1 ; j < arr.length ; j++){
                if(arr[minIndex] > arr[j]){
                    minIndex = j
                }
            }
            var temp = arr[i]
            arr[i] = arr[minIndex]
            arr[minIndex] = temp
        }
        console.log(arr)

CountSort

把一个数组arr里面的所有元素的值,作为临时数组tempArr的下标赋进去,然后计数是否有重复的,有重复就++。 再往后,arr.length设置为0,循环一遍tempArr,判断是否有值,无值就continue,有值 值为1 赋一遍值,值为几赋几遍,说明有几个重复元素,就一个个的往后新的arr里面赋值

        var arr = [14,3,89,45,14,36,47,1]
        var tempArr = []
        for(var i =0 ; i <arr.length ; i++){
            if(tempArr[arr[i]]!==undefined){
                tempArr[arr[i]]++
            }else{
            tempArr[arr[i]]=1 
            }
        }

        arr.length = 0
        for(var j = 0 ; j<tempArr.length ; j++){
            if(tempArr[j]===undefined)continue
            for(var k = 0 ; k < tempArr[j] ;k++){
                arr[arr.length]=j
            }
        }
        console.log(arr)

猜你喜欢

转载自blog.csdn.net/qq_42698576/article/details/107825913