直接上代码~
/**
* 排序算法
* @param {Array} arr 要排序的数组
*/
//冒泡排序 复杂度O(n2) 每次循环都依次比较相邻两数,将最大的数换到最后面
function bubbleSort(arr){
var len = arr.length
//总共循环n-1次
for (var i=1;i<len;i++){
// 当前循环需要遍历到的位置
for (var j=0;j<len-i;j++){
//如果当前项大于后一项,互换位置
if(arr[j]>arr[j+1]){
var tmp = arr[j]
arr[j]=arr[j+1]
arr[j+1]=tmp
}
}
}
return arr
}
//冒泡改进 最佳情况下O(n) 设置标志位swap,
//如果在一轮循环中没有发生数据交换说明数组已经有序,直接结束循环
function bubbleSortImprove(arr){
var len = arr.length
//设置标志位
var swap = false
for (var i=1;i<len;i++){
swap = false
for (var j=0;j<len-i;j++){
if(arr[j]>arr[j+1]){
var tmp = arr[j]
arr[j]=arr[j+1]
arr[j+1]=tmp
swap = true
}
}
//上一轮循环中没有项交换,结束循环
if (swap==false){
break;
}
}
return arr
}
//快速排序 O(nLogn)
function quickSort(arr){
//递归基础条件
if (arr.length<=1){
return arr
}
//从数组中选择一个点为基准点
var pivot = arr.shift()
var left = []
var right = []
for (var i=0,len=arr.length;i<len;i++){
//比基准大的放在右边
if (arr[i]>pivot){
right.push(arr[i])
}
//比基准小的放左边
else{
left.push(arr[i])
}
}
// 插入基准点 递归
return quickSort(left).concat([pivot],quickSort(right))
}
//插入排序O(n2)
function insertSort(arr){
// 将第一个数当成已排好的数组,循环插入后面的数
for (var i=1,len=arr.length;i<len;i++){
//当前要插入的数的值
var value = arr[i]
//当前要插入的数的索引
var position = i
//从已排序好的数组尾部向前遍历
while (position>0 && arr[position-1]>value){
arr[position]=arr[position-1]
position--
}
//插入
arr[position]= value
}
return arr
}