1. 选择排序
时间复杂度 O(n²),使用时数据规模越小越好
1.1 算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
1.2 代码实现
function selectionSort(arr) { var len = arr.length; var minIndex, temp; for (var i = 0; i < len - 1; i++) { minIndex = i; for (var j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { // 寻找最小的数 minIndex = j; // 将最小数的索引保存 } } temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } return arr;}
2. 快速排序
快速排序的最坏运行情况是 O(n²),但它的平摊期望时间是 O(nlogn)。
2.1 算法步骤
从数列中挑出一个元素,称为 "基准";
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作;
递归地把小于基准值元素的子数列和大于基准值元素的子数列排序;
2.2 代码实现
function quickSort(arr){
if(arr.length<= 1){return arr}
let pivotIndex = Math.floor(arr.length/2)
let pivot = arr.splice(pivotIndex,1)[0]
let right =[]
let left = []
for ( let i = 0 ;i <arr.length ; i ++){
if(arr[i]<pivot){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat([pivot],quickSort(right))
}