您的位置:首页 > 其它

算法基础之插入排序

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²)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序 算法