视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JS实现的计数排序与基数排序算法示例
2020-11-27 22:24:25 责编:小采
文档


本文实例讲述了JS实现的计数排序与基数排序算法。分享给大家供大家参考,具体如下:

计数排序

计数排序就是简单的桶排序,一个桶代表数组中一个数出现的个数,所以需要一个和数组数字范围一样大的辅助数组,一般用在范围小于100的排序,时间复杂度为O(n),空间复杂度为数组的数字范围。

/**
 * 范围在 start - end 之间的排序
 * 计数排序需要辅助数组,该辅助数组的长度是待排序数组的范围,所以一般用作范围小于100的排序
 */
function countSort(arr, start, end) {
 var len = arr.length;
 // 桶数组
 var suportArr = new Array(end - start + 1);
 // 结果数组
 var resArr = new Array(len);
 // 初始化桶数组
 for (i = 0; i < suportArr.length; i++) {
 suportArr[i] = 0;
 }
 // 待排序数组中的数组出现,在桶子对应位置+1代表这个数出现的个数+1了
 for (let i = 0; i < len; i++) {
 suportArr[arr[i]]++;
 }
 // 从第1项开始,桶数组加上前一个桶的个数,现在辅助数组的意义变成了每一项的排名了。
 for (let i = 1; i < suportArr.length; i++) {
 suportArr[i] += suportArr[i - 1];
 }
 // 根据辅助数组的排名,从后往前赋值
 for (let i = len - 1; i >= 0; i--) {
 resArr[suportArr[arr[i]] - 1] = arr[i];
 suportArr[arr[i]]--;
 }
 return resArr;
}

基数排序

基数排序是多躺的桶排序

var radix = 16; // 基数,可以为任何数,越大趟数越小,但是桶数越多,最好根据最大数字进行定义。
function _roundSort(arr, round, radix) {
 var buckets = new Array(radix);
 for (let i = 0; i < radix; i++) {
 buckets[i] = [];
 }
 // 将数组中的数放进对应的桶子中
 for (let i = 0; i < arr.length; i++) {
 let remainder = Math.floor(arr[i] / (radix ** (round - 1))) % radix;
 buckets[remainder].push(arr[i]);
 }
 // 将数组重新根据桶子进行排序
 var index = 0;
 for (let i = 0; i < buckets.length; i++) {
 for (let j = 0; j < buckets[i].length; j++) {
 arr[index++] = buckets[i][j];
 }
 }
}
function radixSort(arr, round) {
 for (let i = 1; i <= round; i++) {
 _roundSort(arr, i, radix);
 }
 return arr;
}
console.log(radixSort([10,5,5,50,0,155,4622,5,1,4,2154], 4));

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

下载本文
显示全文
专题