給出一個數(shù)組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這句燕少,重復(fù)每一次排序的序列,一次比較兩個元素蒿囤,如果順序錯誤就把它們調(diào)整過來(升序)客们。
3.選擇排序
思想:找最小值放到最前面,有一個中間值材诽,每次比較的是給定的索引值和數(shù)組中后面每個值的比較镶摘,如果當(dāng)前索引的值大于后面的索引值,通過中間值對兩者進行交換岳守。
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.快速排序
思想:快速排序的思想最好理解凄敢,新建一個三個新數(shù)組,給需要排序的數(shù)組做循環(huán)湿痢,用每一個索引值和數(shù)組中間值做比較涝缝,大于中間值的放在右面數(shù)組扑庞,小于中間值的放在左邊數(shù)組,最后用concat將數(shù)組做連接拒逮。
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.插入排序
思想:會玩撲克牌就能理解什么是插入排序罐氨,很簡單,先抓一張牌放在手里滩援,然后新抓的牌和手里的牌從后往前作比較栅隐,當(dāng)新抓的牌大于手里的牌放在其后面,如果小于依次和前面的牌作比較玩徊,最后當(dāng)比較到手里第一張租悄,直接插入到最前面。
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;
}