给出一个数组var bb = [1,2,4,3,56,12,34,0];用几种常用方法对其升序排序:
1.sort()
bb.sort(function(a,b){
return a-b;
})
console.log(bb);//[0, 1, 2, 3, 4, 12, 34, 56]
2.冒泡排序
function Sort1(arr){
var temp;
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
console.log(Sort1(bb));//[0, 1, 2, 3, 4, 12, 34, 56]
冒泡方法的重点在arr.length-1-i这句,重复每一次排序的序列,一次比较两个元素,如果顺序错误就把它们调整过来(升序)。
3.选择排序
思想:有一个中间值,每次比较的是给定的索引值和数组中后面每个值的比较,如果当前索引的值大于后面的索引值,通过中间值对两者进行交换。
function Sort2(arr){
var temp;
for(var i =0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
temp = arr[i];
arr[i] = arr[j];
arr[j]=temp;
}
}
}
return arr;
}
console.log(Sort2(bb));//[0, 1, 2, 3, 4, 12, 34, 56]
4.快速排序
思想:快速排序的思想最好理解,新建一个三个新数组,给需要排序的数组做循环,用每一个索引值和数组中间值做比较,大于中间值的放在右面数组,小于中间值的放在左边数组,最后用concat将数组做连接。
function Sort3(arr){
if (arr.length <= 1) {
return arr;
}
var mid = Math.floor(arr.length/2);
var midVal = arr.splice(mid,1)[0];
var leftArr = [];
var rightArr = [];
var newArr = [];
for(var i =0;i<arr.length;i++){
if(arr[i]<midVal ){
leftArr.push(arr[i]);
}else{
rightArr.push(arr[i]);
}
}
newArr= Sort3(leftArr).concat(midVal,Sort3(rightArr));;
return newArr;
}
console.log(Sort3(bb));//[0, 1, 2, 3, 4, 12, 34, 56]
5.插入排序
思想:会玩扑克牌就能理解什么是插入排序,很简单,先抓一张牌放在手里,然后新抓的牌和手里的牌从后往前作比较,当新抓的牌大于手里的牌放在其后面,如果小于依次和前面的牌作比较,最后当比较到手里第一张,直接插入到最前面。
function insert(arr){
let handle = [];
handle.push(arr[0]);
for(let i =1;i<arr.length;i++){
let a = arr[i];
for(let j=handle.length-1;j>=0;j--){
let b = handle[j];
if(a>b){
handle.splice(j+1,0,a);
break;
}
if(j===0){
handle.unshift(a);
}
}
}
return handle;
}









网友评论