排序
1.冒泡排序 (O(n2))
比较相邻元素
var arr1 = [1,5,6,9,8,7,2,3,4]
function bubbleSort(a){
for(let i = 0; i < a.length-1; i ++){
for(let j = 0; j < a.length-1;j++)
if(a[j+1] < a[j]){
tmp = a[j+1]
a[j+1] = a[j]
a[j] = tmp
}
console.log(a)
}
}
bubbleSort(arr1)
console.log(bubble(arr));
2.选择排序(O(n^2))
依次找到剩余元素最小值,放置排好的末尾
var arr2 = [0,9,8,7,6,5,4,3,2,1]
function slectSort(a){
let tmp = null
let min = null
let len = a.length
for(let i = 0;i < len-1; i ++){
min = i
for(let j = i+1;j < len; j++){
if(a[j] < a[min]){
min = j
}
}
tmp = a[i]
a[i] =a[min]
a[min] = tmp
}
console.log(a)
}
slectSort(arr2)
3.插入排序 O(n^2)
即构建有序序列未排序数据根据已排序数据从后往前比
var arr3 = [1,5,9,3,4,7,8,6,2,0]
function insertSort(a){
let tmp = null
let cur = null
for(let i = 1; i <= a.length-1;i++){
tmp = a[i]
cur = i - 1
while(cur >= 0 && a[cur] > tmp){
a[cur+1] = a[cur]
cur --
}
a[cur+1] = tmp
}
console.log(a);
}
insertSort(arr3)
//4.希尔排序
var arr4 = [5,6,8,7,9,4,1,2,3,0]
function shellSort(a){
let len = a.length
let tmp = null
let gap = Math.floor(len/2)
while(gap >0.5){
for(let i = 0; i < len;i++){
for(let j = i;j > gap-1;j =j- gap){
if(a[j] < a[j-gap]){
tmp = a[j]
a[j] = a[j-gap]
a[j-gap] = tmp
}
}
}
gap = Math.floor(gap/2)
}
console.log(a);
}
shellSort(arr4)
5.快速排序
var arr = [5,4,8,1,3,7,0,9,2,6];
var len = arr.length;
var qSort = function(a){
var len = arr.length;
if (len < 2) return arr;
var basic = arr[0]; //默认第一个为基准数
var left = [];
var right = [];
for(var j=1; j<len ; j++){
if(arr[j] < basic){
left.push(arr[j]);
}else {
right.push(arr[j]);
}
}
return qsort(left).concat(basic, qsort(right))
}