冒泡排序原理:比较相邻两个元素的大小,左边大于右边则交换两个元素位置(默认从小到大排序)
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));
选择排序算法原理:将未排序的数中最大(小)的挑出来放到最后,再从剩下的数按照此方法进行排序。
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));
插入排序基本原理:将元素一个个插入到已经排好序的数组里
function insertionSort(arr){
for(var i=1;i<arr.length;i++){ //外层循环从1开始,默认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));
希尔排序基本原理:将整个待排序的序列分成若干个子序列,在每个子序列里进行插入排序,等到整个序列基本有序时,对整个序列进行直接插入排序
function shellSort(arr) {
var len = arr.length,
temp,
gap = 1;
while(gap < len/3) { //动态定义间隔序列
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));
网友评论