js实现基数排序

/**

    * 基数排序 O(d(n+radix))

    * radix 基数 d为堆数

    *

    * @param {any} arr

    * @param {any} radix 基数

    * @returns

    *

    * @memberof sort

    */

    sort8(arr, radix) {

        let max = this.findMax(arr, radix); // 找出堆数

        console.log(max);

        for(let i = 1;i <= max;i++) {

            this.buildBy(arr, i, radix);

        }

        return arr;

    }

    /**

    * 找出堆数

    *

    * @param {any} arr

    * @param {any} radix 基数

    * @returns 堆数

    *

    * @memberof sort

    */

    findMax(arr, radix) {

        let max = 1;

        let len = arr.length;

        for (let i = 0; i < len;i++) {

            while(Math.floor(arr[i] / (radix** (max- 1))) > 1) {

                max++;

            }

        }

        return max;

    }

    /**

    * 分桶排序

    *

    * @param {any} arr

    * @param {any} index 当前桶

    * @param {any} radix 基数

    *

    * @memberof sort

    */

    buildBy(arr, index, radix) {

        let bockets = new Array(radix);

        for (let i = 0;i < radix;i++) {

            bockets[i] = [];

        }

        for (let i = 0;i < arr.length;i++) {

            let remainder = Math.floor(arr[i] / (radix ** (index - 1))) % radix;

            bockets[remainder].push(arr[i]);

        }

        var temp = 0;

        for (let i = 0;i < bockets.length;i++) {

            for (let j = 0;j< bockets[i].length;j++) {

                arr[temp] = bockets[i][j];

                temp++

            }

        }

    }

你可能感兴趣的:(js实现基数排序)