1 概述
插入排序的基本方法是:每一步將乙個待排序的元素,按其排序碼的大小,插入到前面已經排好序的一組元素的適當位置上去,直到元素全部插入為止。
那麼可以選擇不同的方法在已經排好序的資料表中尋找插入位置。根據查詢方法不同,有多種插入排序方法,主要分兩種:第一種:直接插入排序;第二種:二分法插入排序。
2. 直接插入排序
插入排序的基本思想如下:當準備插入第i個數時,前面的 i-1 個數已經排好序了,那麼這時候只需要把這第 i 個數插到前面 i-1 個數的合適位置,然後此時就變成前面 i 個數已經排好序,接下來插入第 i+1個數,直到結束,思路如下:
1)假設現有一陣列arr=[8,6,17,84,25,6,14,10];
2)每一趟的過程如下
3)最終,經過arr.length-1趟,就能夠把陣列給排好序
那麼這裡面的關鍵點就在於,如何把第 i 個數正確地插入到前面的i-1個已經排好序的序列中;其實也很簡單,只需要在前面的i-1個序列中,從後往前依次遍歷,如果遍歷到的數比第i個數大,那麼就往後面挪乙個位置,發現遍歷到的數比第i個數小,那麼就把第 i 個數直接放到這乙個位置就可以了!
var arr=[8
,6,17
,12,84
,25,6
,14,10
];var len=arr.length;
for(
var i=
1;i)// 這時候能跳出迴圈的話,要麼已經到了第乙個位置了要麼就是這個數已經大於它前面的數了
// 所以把這個數直接放這個位置就可以了
arr[j+1]
=temp;
}console.
log(arr)
;
最好的狀況下時間複雜度為o(n),最差的狀況o(n^2),平均為o(nlogn).
3. 二分法插入排序
其實原理是一樣的,不同的是在直接插入排序中是直接遍歷去找到合適的位置並且插入的;那麼二分法插入排序其實就是對這一過程進行了優化,利用二分法找到合適的位置;
var arr=[8
,6,17
,12,84
,25,6
,14,10
];var len=arr.length;
for(
var i=
1;i)else
}for
(var j=i-
1; j>=low; j--
) arr[low]
=temp;
}console.
log(arr)
;
排序演算法 插入排序 直接插入排序
package 插入排序 直接插入排序 從後向前找到合適位置後插入 穩定 基本思想 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。public class 直接插入排序 system.out.println 排序之前 fo...
排序演算法 插入排序 直接插入排序
當插入第i i 1 個元素時,前面的v 0 v i 1 等i 1個 元素已經有序。這時,將第i個元素與前i 1個元素v i 1 v 0 依次比較,找到插入位置即將v i 插入,同時原來位置上的元素向後順移。在這裡,插入位置的查詢是順序查詢。直接插入排序是一種穩定的排序演算法,其實現如下 public...
排序演算法 直接插入排序
思想 每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中 依次進行下去,進行了 n 1 趟掃瞄以後就完成了整個排序過程。演算法複雜度 如果目標是把...