算法基礎之插入排序

問題描述:

輸入: 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²)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章