查找和排序算法是算法(
Algorithm
)的入门知识,但它的经典思想能够运用到不少高级算法中;因此在公司面试时,面试官总会对此有所说起,若是连这种简单的算法都写不出来的话,相信面试官也不会对你抱有任何兴趣了,所以,对于这种初级排序算法咱们必定要作到信手拈来的程度;本文将依次简单介绍常见的十种排序算法,本人水平有限,仅供学习与交流面试
基本思想: 经过与相邻元素值进行比较,而后依次交换位置,直到最大值交换至最后,造成升序,其过程就像水底冒出的气泡同样,由小变大,故称做冒泡排序算法
Tips:当数据为正序时,排序时间最少;反之则最多 api
动画演示 bash
let arr=[5,4,3,2,1];
let L=arr.length;
function bubbleSort(arr){
for(let i=0;i<L;i++){
for(let j=0;j<L-i-1;j++){
if(arr[j]>arr[j+1]){ //比较数据
let temp = arr[j+1]; //数据交换
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
let res =bubbleSort(arr);
console.log(res);
复制代码
时间复杂度O(n^2) , 空间复杂度O(1)学习
基本思想: 首先在未排序的序列中找到小的,把它放在首位,而后继续寻找最小值,较小则放到已排序的序尾动画
动画演示 ui
let arr = [5, 4, 3, 2, 1];
let minIndex, temp;
function selectionSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
minIndex = i;
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) { //选择最小的数
minIndex = j; //交换索引
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
return arr;
}
let res = selectionSort(arr);
console.log(res);
复制代码
时间复杂度O(n^2) , 空间复杂度O(1)spa
虽然冒泡排序与选择排序的时间复杂度相同,但一般来讲,选择排序更快一些,由于选择排序的交换次数少于冒泡排序 3d
**基本思想:**假定序列中第一个元素为最小值,而后第二项与其比较,小则插到前面,反以后面,剩下的元素再挨个同已排序的比较 动画演示code
let arr = [5,4,3,2,1];
let current, preIndex;
function insertSort(){
for(let i=0;i<arr.length;i++){
current = arr[i];
preIndex = i-1;
while(preIndex>=0&&arr[preIndex]>current){
arr[preIndex+1] = arr[preIndex];
preIndex--;
}
arr[preIndex+1]= current;
}
return arr;
}
let res = insertSort(arr);
console.log(res);
复制代码
时间复杂度O(n^2),空间复杂度O(1)