1.简单选择排序
基本思想:先选第一个数,分别与后面n-1个数比较,保留数组中最小值在位置上,大值则交换;再选第二个数,分别与后面n-2个数比较,如此循环
时间复杂度:O(n^2)


function selectSort(arr){ var temp; for(var i = 0; i < arr.length - 1; i++){ for(var j = i + 1; j < arr.length; j++){ if(arr[i] > arr[j]){ temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; }
2.冒泡排序(默认小数上冒 )
基本思想:(小数往上冒)最后一个数不断与前一个数比较,若较小就往上冒,循环一次会把最小数带到最高处
时间复杂度:O(n^2)



function bubbleSort (arr) { for(var i = 0; i < arr.length; i++){ for(var j = arr.length; j > i; j--){ if(arr[j] < arr[j - 1]){ [arr[j], arr[j - 1]] = [arr[j -1], arr[j]]; } } } return arr; }
改进冒泡排序:
基本思想:记录最后一个交换的地方,不交换的地方说明已经排好序了,所以下一次排序只需要排[pos,arr.length-1]这一段,而非[i,arr.length-1]
function bubbleSort_(arr){ var pos = 0; while(pos != arr.length - 2){ var count = pos; for(var j = arr.length - 1; j > count; j--){ if(arr[j] < arr[j - 1]){ [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]]; pos = j } } } return arr; }
3.插入排序
基本思想:从第二个数开始,不断插入到前面的有序数组中去(代码实现时,不断把大数往后移,基数找到位置后插入)
function insertion (arr) { for(var i = 1; i < arr.length; i++){ var num = arr[i]; var j = i; while(num < arr[j - 1] && j >= 1){ arr[j] = arr[j - 1]; j--; } arr[j] = num; } return arr; }
4.快速排序
基本思想:以第一个数为基数,小数放左边,大数放右边,左右数组递归
function quick (arr) { if(arr.length <= 1){ return arr; }else{ var left = []; var right = []; var num = arr[0]; for(var i = 1; i < arr.length; i++){ if(num > arr[i]){ left.push(arr[i]); }else { right.push(arr[i]); } } return quick(left).concat(num, quick(right)); } }