JavaScript——计数排序(桶排序)
准备一个原始数组(001)
准备一个新的空数组(002)
遍历原始数组(001) 把每一个数据当做新数组(002)的索引
在新数组(002) 内的值当做个数来填充
遍历新数组(002) 把索引当数据填充回去, 填充多少个(值是多少填充多少个)
var arr = [7,3,24,5,20,1,0,12,10,0,5]
var temp = []//计个数
for(var i=0;i<arr.length;i++){
//把原始数组内的数据当做新数组内的索引使用
temp[arr[i]] ? temp[arr[i]]++ : temp[arr[i]] = 1
}
arr.length = 0;
console.log(temp);
for(var i=0; i<temp.length; i++){
if(!temp[i]) continue
// 回填的个数
var count = temp[i];
// 回填的数据
data = i;
// 多相同数字一次赋值
for(var j=0;j<count;j++){
arr[arr.length] = data
}
}
console.log(arr);
计算两个数字的最大公约数 (已理解)
function fun(a,b){
if(a%b == 0) return b;
else return fun(b,a%b);
}
console.log(fun(12,8));
var gcd = function(a, b){
return b ? gcd(b, a % b) : a;
}
-------------解析--------------
var gcd = function(a, b){
return b ? gcd(b, a % b) : a;//把a%b==0这个条件直接简化为递归后判断最新的b !== 0
// 8 8 4
// 4 4 0
// 0 4
}
console.log(gcd(12,8));
-------------转化为箭头函数--------------
var a = 12,b = 8;
fun_2 = (a,b)=> b ? fun_2(b, a % b) : a
console.log('最小公约数',a*b/fun_2(a,b));