- 冒泡排序
- 步骤
- 比较第一项和第二项,如果第一项的数比第二项大,把第一项放在第二项后面。再比较第二项和第三项,以此类推,直到最后一项,这样最大的数字就到了最后的位置。见例子中的内循环。
- 重复上面的步骤,直到没有任何一对数字需要比较。
- JavaScript 实现:
- 步骤
functionbubbleSort(arr) {
//获取数组的长度
var len = arr.length,
i, j;
//外循环取第一项,第一次循环结束后取第二项,依次类推
for (i = len - 1; i >= 0; i--) {
//内循环取第二项,第一次循环后取第三项,依次类推
for (j = 1; j <= i; j++) {
//如果前者比后者大,交换它们
// 方法是重新声明一个temp存放arr[j-1]
// 再把arr[j]的值放到arr[j-1]的位置
// 再把temp中存的值放到arr[j]的位置。
if (arr[j - 1] > arr[j]) {
var temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
console.log(bubbleSort([7,5, 2, 4, 3, 9])); //[ 2, 3, 4, 5, 7, 9 ]
- 选择排序
- 步骤:
- 先找到最小值,把它放到序列的启起始位置
- 然后再继续找最小值,放在第二个位置,以此类推。
- JavaScript 实现:
- 步骤:
function selectionSort(arr) {
var minIndex, temp, i, j,
len = arr.length;
for (i = 0; i < len;i++) {
//初始位置下标标记
minIndex = i;
//找到最小值的下标
for (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;
};
- 插入排序
- 如何工作:
想象一下你在玩纸牌,某个人一张接一张把卡片给你,当你接到卡片时,你把小一点的数字放在左边,这就是插入排序。
- 步骤:
- 如果你拿到的第一张卡片是5,什么都别做。
- 如果你拿到第二张卡片是 2,你把它放在卡片 5 的前面,这样你就改变了它们的位置。
- 如果你拿到卡片4,把它放在第二个位置,就是 2 和 5 的中间,就等于把 5 向后移动了一个位置,而 2 依然是最小的,不用移动,这样就把 4 插入了第二位置。
- 如果你拿到了 10, 比 5 还要大,因此放在最后的位置。依次类推,直到没有新的卡片。
- 代码
functioninsertionSort(arr) {
var i, //未排序的索引
j, //排序部分的索引
value, //当前将要用于比较的值
len = arr.length;
for (i = 1; i < len; i++) {
//将当前的值存起来以便之后用于比较
value = arr[i];
//如果已排序部分的值比未排序的当前值要大
//调换它们
for (j = i - 1; j >= 0 &&arr[j] > value; j--) {
//往后挪一个
arr[j + 1] = arr[j];
}
arr[j + 1] = value;
}
return arr;
}
参考资料:
http://khan4019.github.io/front-end-Interview-Questions/sort.html
http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/