sort( ) ,对数组进行正序或者倒序排列,改变原数组
var arr=[1,4,6,2,3,8,7,6,5,3,9,10];
arr.sort();
console.log(arr);//[1,10,2,3,3,4,5,6,6,7,8,9,12]
想让数组按照从小到大,或者从大到小的顺序排列,需要给 sort ( ) 里传入参数
var arr=[1,4,6,2,3,8,7,6,5,3,9,10];
//return a-b,表示从小到大排列
//return b-a,表示从大到小排列
arr.sort(function(a,b){
return a-b;
})
//return Math.random()-0.5; 表示乱序排列
arr.sort(function(){
return Math.random()-0.5;
})
冒泡排序
- 从后向前循环
- 内部从前向后循环到外层变量
- 判断前值是否大于后值,如果前值大小后值,则交换位置
function sort(arr){
var len=arr.length;
while(len>0){
for(var i=0;i<len;i++){
if(arr[i]>arr[i+1]){
var temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
len--;
}
}
选择排序
先找出最小或者最大的索引值,然后用当前的下标的元素与这个最小的元素交换
- 遍历数组
- 设置最小的索引值为当前的索引值
- 从当前的下一项开始遍历到数组的尾部
- 判断所有遍历的值中最小的值得索引值
- 交换当前值和最小索引值的元素
function sort(arr){
var minIndex;
for(var i=0;i<arr.length;i++){
//假设第一位元素为最小值
minIndex=i;
for(var j=i+1;j<arr.length;j++){
//判断如果当前元素大于最小值,则minIndex不变,否则把当前元素的下标赋值给变量minIndex
minIndex=arr[minIndex]<arr[j] ? minIndex : j;
}
//交换当前值和minIndex的元素
var temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
}
快速排序(快排)
- 删除数组中间的元素,并且,将这个元素返回一个变量
- 创建两个空数组,一个是left,一个是right,遍历这个数组,将小于中间元素的数据存入left,大于中间元素的数据存入right
- 将left数组递归与中间元素和right数组递归的结果合并返回
- 在函数最顶部,一定要写数组长度小于等于1,返回该数组
var arr = [1,4,2,2,3,10];
function sort(arr){
//如果数组的长度小于等于1,则停止回调
if(arr.length<=1) return arr;
var left=[];
var right=[];
//取到数组最中间的值赋值给item,如果数组的长度为单数,则取中间前一位数
var item=arr.splice(parseInt(arr.length/2),1)[0];
for(var i=0;i<arr.length;i++){
//遍历数组,如果值小于item,则放入left数组中
if(arr[i]<item) left.push(arr[i]);
//如果值大小item,则放入right数组中
else right.push(arr[i]);
}
arr=sort(left).concat(item,sort(right));
return arr;
}
console.log(sort(arr));
桶排序
当对象中的key是数值时,对象会按照数值顺序自动排列好,当key是数值和字符交叉时,优先排序数值。
- 将数组中的各项作为对象的key和value;
- 当对象中的key是数值时,对象会按照数值顺序自动排列好;
- 将原数组中的数据清除;
- 再将对象中的value,依次添加到数组中;
let arr=[2,5,7,1,4,3,6,8,0];
let obj={};
arr.forEach(item=>{
obj[item]=item
});
arr.length=0;
for(let prop in obj){
arr.push(obj[prop]);
}
console.log(arr);//[0,1,2,3,4,5,6,7,8]