冒泡排序
思路:比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至 正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。
![](https://i-blog.csdnimg.cn/blog_migrate/2a1815304c27647f6f0d4cadcbed3190.gif)
代码实现:
function bubbleSort2(arr){
let len = arr.length;
for(var i=0;i<len;i++){
// 已排序好的不用再遍历,故取j<len-1-i
for(var j=0;j<len-1-i;j++){
if(arr[j]>arr[j+1]){
// 如果第j个数据大于第j+1个数据,则对调位置
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
}
}
}
return arr;
}
选择排序
思路:找到数据结构中的小值并 将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推。
![](https://i-blog.csdnimg.cn/blog_migrate/b4972f3da3a0dd492e4969d55ec1ca47.gif)
代码实现:
function selctionSort(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
}
}
// 将未排序中最小值,与起始值对调
if(minIndex != i){
[arr[i],arr[minIndex]] = [arr[minIndex],arr[i]]
}
}
return arr;
}
插入排序
思路:假定第一项已经排序了,接着, 它和第二项进行比较,第二项是应该待在原位还是插到第一项之前呢?这样,头两项就已正确排 序,接着和第三项比较(它是该插入到第一、第二还是第三的位置呢?),以此类推。
![](https://i-blog.csdnimg.cn/blog_migrate/f283339e4c3d7aca44fb3b194fc64b90.gif)
代码实现:
function insertionSort(arr) {
var len = arr.length,
j, temp;
// 默认第一项已排序,从第二项开始
for (var i = 1; i < len; i++) {
j = i;
// 要插入的值
temp = arr[i];
// 将这个值与前面每一个值比较,确定插入的位置
while (j > 0 && temp < arr[j - 1]) {
arr[j] = arr[j - 1];
j--;
}
// 插入
arr[j] = temp;
}
return arr
}
总结:
1. 时间复杂度比较
2. 排序小型数组时,插入排序比选择排序和冒泡排序性能要好
备注:
1. 参考书籍:《学习JavaScript数据结构与算法》第2版;
2. 动图来自于网络,如有侵权,请联系删除。