复习排序算法,首先最最最基础的就是冒泡排序和插入排序了,而且这个也会经常在面试中被问到,在此做个总结
冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
JavaScript实现如下:
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
for (var j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j+1]) { // 相邻元素两两对比
var temp = arr[j+1]; // 元素交换
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
插入排序
个人理解,无非就是一个数组,分成两个部分,一部分是有顺序的,一部分是没有顺序的(开始的时候的话,将第一个元素看成是有顺序的),然后提出无顺序的元素和有顺序的部分做比较,然后在合适的地方插入
JavaScript实现:
function insertionSort(arr) {
var len = arr.length;
var preIndex, current;
for (var i = 1; i < len; i++) {
preIndex = i - 1;
current = arr[i];
while(preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex+1] = arr[preIndex];
preIndex--;
}
arr[preIndex+1] = current;
}
return arr;
}
选择排序
选择排序,个人理解也是分成两部分,一部分是有序的,一部分是无顺序的,一开始都是无顺序的,遍历完整个数组,找出最小(大)的那个元素,插入有序的其中,然后再接着查找次小(大)的那个数插入有序的中。
JavaScript实现代码:
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;
}