js算法:计数算法 counting sort

本文介绍了一种基于数组的排序算法——计数排序的基本原理及其实现过程。通过具体实例展示了如何利用计数排序来确定每个元素在排序后数组中的正确位置,并提供了完整的JavaScript实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 计数排序 count sort

/**
 *	使用count sort基本原理
 *	
 *  已知要排序的数字在一个区间中(如 0..k),这样我们就可以计算出来 A[0...n]中的某一项A[i]有多少个数小于它,进而得知它应该
 *  放到排好序数组的第多少个位置 A[2,3,5,4,8,7,6,9,1,0] 如A[7] = 9 因为比9小的数字有9个,
 *  所以我们知道9应该放到排好序的数组B[0..9]的第9个位置
 */

 'use strict';

 /**
  *	arr是原数组, sortedArr排好序数组, k待排序数字的最大范围
  */
 function countSort(arr, sortedArr, k) {
    let tmpArr = [];
    //初始化tmpArr值全为0,长度为k+1,因为有0
    for(var i=0; i<=k; i++) {
    	tmpArr[i] = 0;
    }

    //计算待排序的数组arr,每一项的数字出现的次数
    for(var j=0, jj=arr.length; j<jj; j++) {
    	tmpArr[arr[j]] = tmpArr[arr[j]] + 1;
    }

    //统计有多少小于等于arr[i]的数字
    for(var i=1; i<=k; i++) {
    	tmpArr[i] = tmpArr[i] + tmpArr[i-1];
    }

    //对arr进行排序
    if (!sortedArr) {
    	sortedArr = [];
    }
    for(var j=0, jj=arr.length; j<jj; j++) {
    	var idx = arr[j];
    	sortedArr[tmpArr[idx]-1] = idx;
    	//此处切记要递减,因为有可能arr中有数字重复的,如果数字重复第二次出现的数字,
    	//我们放到计算出来的位置的前一个,如果第三次出现,则前二个,以此增加
    	tmpArr[idx] = tmpArr[idx] - 1;
    }
 }

 let arr = [1,5,4,8,7,9,6,5,4,3,2,0];
 console.info("原数组:", arr);
 let sortedArr = [];

 countSort(arr, sortedArr, 9);
 console.info("排序后:", sortedArr);

//运行输出结果:node count-sort.js
//原数组: [ 1, 5, 4, 8, 7, 9, 6, 5, 4, 3, 2, 0 ]
//排序后: [ 0, 1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 9 ]

转载于:https://my.oschina.net/wanglihui/blog/703172

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值