排序原理:首先找到数组中的最大值,从0开始每次加1(0,1,2,3,…,max)。然后判断数组中的数是否等于它,等于就丢到新数组,完成排序
此排序运用了一个取数组最大值的方法。如下
var max = Math.max.apply(null,arr)
function zichuang(arr){ //参数是任意一个数组
var max = Math.max.apply(null,arr); // 取数组最大值 别疑惑 这一步很简单(Math.max.apply()取数组最大值的方法)
// console.log(max)
var newArr = []; // 创建一个新数组
for(var i = 0; i <= max;i++){ // 第一层循环是从0开始到最大值max结束
for(var j = 0;j < arr.length;j++){ // 第二层是遍历老数组
if(arr[j] == i){
newArr.push(arr[j]) // 如果数组中有一个数等于第一层循环中的数 就往新数组中添加
}
}
}
return newArr
}
console.log(zichuang([4,2,1,6,3,8])) // 最后输出[1,2,3,4,6,8]
此排序缺点:循环次数过多,和计数排序的循环次数一样。就是如果数组是[1,1000]它还是会循环1000次,因为它至少会循环数组最大值的值得次数。
此排序优点:可以同时完成排序,去重,计数。