冒泡排序原理:比較相鄰兩個元素的大小歌懒,左邊大于右邊則交換兩個元素位置(默認(rèn)從小到大排序)
function bubbleSort(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1])
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
}
}
return arr;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(bubbleSort(arr));
選擇排序算法原理:將未排序的數(shù)中最大(欣沧馈)的挑出來放到最后,再從剩下的數(shù)按照此方法進(jìn)行排序及皂。
function selectionSort(arr){
let minIndex;
for(let i=0;i<arr.length-1;i++){
minIndex = i;
for (let j = i+1; j < arr.length-1; j++) {
if(arr[j]<arr[minIndex])
minIndex = j;
}
[arr[minIndex],arr[i]] = [arr[i],arr[minIndex]];
}
return arr;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(selectionSort(arr));
插入排序基本原理:將元素一個個插入到已經(jīng)排好序的數(shù)組里
function insertionSort(arr){
for(var i=1;i<arr.length;i++){ //外層循環(huán)從1開始甫男,默認(rèn)arr[0]是有序的
//尋找元素arr[i]合適的插入位置
for(var j=i;j>0;j--){
if(arr[j] < arr[j-1])
[arr[j],arr[j-1]] = [arr[j-1],arr[j]];
else
break;
}
}
return arr;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(insertionSort(arr));
希爾排序基本原理:將整個待排序的序列分成若干個子序列,在每個子序列里進(jìn)行插入排序验烧,等到整個序列基本有序時板驳,對整個序列進(jìn)行直接插入排序
function shellSort(arr) {
var len = arr.length,
temp,
gap = 1;
while(gap < len/3) { //動態(tài)定義間隔序列
gap = gap*3+1;
}
for (gap; gap > 0; gap = Math.floor(gap/3)) {
for (var i = gap; i < len; i++) {
temp = arr[i];
for (var j = i-gap; j >= 0 && arr[j] > temp; j -= gap) {
arr[j+gap] = arr[j];
}
arr[j+gap] = temp;
}
}
return arr;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(shellSort(arr));