这里首先推荐一个数据结构和算法动态可视化网站:https://visualgo.net/zh
排序是开发中十分常见且核心的操作,虽说实际项目中很小几率会需要我们手动实现,但是了解这些精妙的思想对我们还是大有裨益的。本文简单总结下最基础的几类算法。
1. 冒泡(Bubble Sort)
思想
对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。
在冒泡排序的过程中,如果某一趟执行完毕,没有做任何一次交换操作,比如数组[5,4,1,2,3]
,执行了两次冒泡之后变为[1,2,3,4,5]
。此时,再执行第三次循环后,一次交换都没有做,这就说明剩下的序列已经是有序的,排序提前完成。JavaScript实现
function bubbleSort(arr) {
var len = arr.length;
var i, j, temp, bSwap;
for(i=0; i<len-1; i++){
bSwap = false;
for(j=0; j<len-i-1; j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
// 交换两个数值的简便方式
// [arr[j],arr[j+1]] = [arr[j+1],arr[j]];
bSwap = true;
}
}
if (!bSwap){
break;
}
}
return arr;
}