算法基础之插入排序
2017-03-27 18:12
260 查看
问题描述:
输入: n个数的一个序列,[a1, a2 , a3, a4, ……, an ] 。
输出:输入序列的一个排序结果,[b1, b2 , b3, b4, …… ,bn ], 满足 b1≤ b2 ≤ b3 · · · · ≤ bn 。
算法描述:
插入排序的工作 方式像许多人排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下。 然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。第一次摸牌时只需将牌放入左手,之后每次摸牌时需要将摸到的牌与已在手中的每张牌进行比较,将其插入正确的位置。这样预期的结果是左手上的牌总是排好序的。
代码实现:
function insertionSort(arr)//方法三:插入排序
{
for (var i = 1; i <arr.length; i++) //从数组第二个数开始,往该元素的前边插入
{
var Key = arr[i]; // key代表当前拿到的元素(要进行插入操作的数)
var j = i - 1;
while (j >= 0&& arr[j] > Key) {
arr[j + 1] =arr[j]; // 如果前边的元素比key大,则依次往后移动
arr[j] = Key; //将key插入当前位置
j--; //从右往左逐个比较 }
}
}
return arr;
}
var arr=[5,2,4,6,1,3];
console.log(insertionSort(arr)) ; // [1, 2 , 3 , 4 , 5 ,6]
分析总结:
最好的情况是所有拿到的数值都已排好序,这样我们只需遍历一次就可以结束程序。这种情况下的算法复杂度为O(n) 。 同时,存在着最坏的情况,拿到的数值是完全反向排序的,在这种情况下我们的算法复杂度是O(n²)。
输入: n个数的一个序列,[a1, a2 , a3, a4, ……, an ] 。
输出:输入序列的一个排序结果,[b1, b2 , b3, b4, …… ,bn ], 满足 b1≤ b2 ≤ b3 · · · · ≤ bn 。
算法描述:
插入排序的工作 方式像许多人排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下。 然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。第一次摸牌时只需将牌放入左手,之后每次摸牌时需要将摸到的牌与已在手中的每张牌进行比较,将其插入正确的位置。这样预期的结果是左手上的牌总是排好序的。
代码实现:
function insertionSort(arr)//方法三:插入排序
{
for (var i = 1; i <arr.length; i++) //从数组第二个数开始,往该元素的前边插入
{
var Key = arr[i]; // key代表当前拿到的元素(要进行插入操作的数)
var j = i - 1;
while (j >= 0&& arr[j] > Key) {
arr[j + 1] =arr[j]; // 如果前边的元素比key大,则依次往后移动
arr[j] = Key; //将key插入当前位置
j--; //从右往左逐个比较 }
}
}
return arr;
}
var arr=[5,2,4,6,1,3];
console.log(insertionSort(arr)) ; // [1, 2 , 3 , 4 , 5 ,6]
分析总结:
最好的情况是所有拿到的数值都已排好序,这样我们只需遍历一次就可以结束程序。这种情况下的算法复杂度为O(n) 。 同时,存在着最坏的情况,拿到的数值是完全反向排序的,在这种情况下我们的算法复杂度是O(n²)。
相关文章推荐
- 一步一步复习数据结构和算法基础-插入排序(1)
- 算法基础之排序篇-插入排序
- 算法基础:排序之插入排序
- 基础算法-插入排序
- 算法导论笔记ch2_算法基础(插入排序、归并排序、设计算法)
- 基础算法 —— 插入排序
- java基础算法之插入排序
- 【算法基础】由插入排序来看如何分析和设计算法
- 【算法基础】由插入排序来看如何分析和设计算法
- 算法基础1—插入排序
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 基础算法-插入排序
- 基础算法1——插入排序和希尔排序
- 算法导论->算法基础->2.1插入排序 (从小到大)
- 基础算法--排序: 之插入排序
- 一步一步复习数据结构和算法基础-插入排序(2)
- 算法基础 (插入排序、合并排序算法)
- 【算法基础】冒泡、选择、插入排序(三种基本排序)
- python实现基础排序算法之(插入排序)
- 基础算法之插入排序