前言
排序是编程中很基础却很有学问的算法。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。本文主要阐述前端面试中最常问的三种排序:冒泡排序、选择排序,其他排序方法详情点我。
* 本文参考链接点我。
冒泡排序
算法描述:
- 比较相邻的元素。如果前一个比后一个大,就交换他们两个,这样循环到最后,最后一位数将是最大的数。
- 最后一个数确定了后不再进行比较,重复步骤 1,不断确定新一轮最大的数值后将其固定不比较,最后所有数据比较完则完成排序。
动图演示:
代码实现:
function bubbleSort(arr) {for (var i = 0; i < arr.length - 1; i++) {for (var j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j+1]) { // 相邻元素两两对比
var temp = arr[j+1]; // 元素交换
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
选择排序
算法描述:每次都找一个最大或者最小的排在开始即可。例如,你想从小到大排列,就找出最大的放第一位,通过循环不断找出当时最大值并插入第一位,最后就会从小到大排列了。
动图演示:
代码实现:
function selectionSort(arr) {
var minIndex, temp;
for (var i = 0; i < arr.length - 1; i++) {
minIndex = i;
for (var 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;
}