經典排序演算法 插入排序

2022-05-04 15:48:10 字數 1510 閱讀 1186

插入的排序的原理是每趟將乙個數按照大小插入到它前面已經排好序的子串行中。依次重複,直到插入全部數字。

以陣列[3,4,1,2]為例,公升序排列陣列。

第一趟從第2個資料開始(第1個數字自己已經有序),跟前面乙個數字比較,如果小於前面數字就將前面數字後移,並繼續向前比較,直到下標小於0為止。如下圖所示

第二個數字4,插入到它前面的有序子串行(3)中,由於4>3所以直接插在3後面即無需移動。第一趟結束。指標i向後移,如下圖所示

第三個數字1,插入到它前面的有序子串行(3,4)中,由於1<4所以將4後移一位(數字1會先儲存起來,不必擔心被覆蓋),然後再讓1與3比較,1<3,所以3後移一位。子串行遍歷完後,將數字1放入插入位置。接著i指標後移,如下圖所示

經過3趟比較後,陣列中的數字已經排好順序。下面看下具體**

1

public

static

void sort(int

array)

10//

位置找到 為insertindex + 1

11 array[insertindex + 1] =insertvalue;12}

13 }

1)第乙個for迴圈用於確定比較趟數,i從1開始(前面有1個數,1個數的子串行肯定有序)到陣列最後乙個數字

2)記錄當前要插入到前面子串行的值(防止子串行數字後移覆蓋)

3)while依次序迴圈子串行,當子串行中數字大於要插入的數字時繼續向前遍歷,直到找到比當前數字更小或子串行遍歷完,插入對應位置

從**可知,插入排序有兩層迴圈,所以其時間複雜度為t(n)=o(n^2)

與前面的排序演算法相同,我們依然生成10萬個隨機數的陣列,使用插入排序方法進行排序,看其執行時間。測試**如下

1

public

static

void

main(string args)

6long begin =system.currenttimemillis();

7sort(array);

8 system.out.println("總耗時="+(system.currenttimemillis() -begin));

9 }

可以看到插入排序演算法比選擇排序更快,10萬個資料的陣列排序大概需要1秒多時間。下篇我們將介紹基於插入演算法的優化演算法 --希爾排序演算法,排序效率是否會更高呢?一起期待!

插入排序演算法的思路是從陣列的第二個數開始,插入到它前面的有序子串行。依次遍歷陣列,直到遍歷完所有資料後,陣列即變為有序。

經典排序演算法2(插入排序)

a 插入排序分類 插入排序主要做兩件事,一是尋找插入點,二是移動插入點左側的資料 所以根據插入點的不同我們將插入排序又分為直接插入排序 折半插入排序和二路插入排序。原理 我將依次遍歷陣列中的元素,將陣列分為 使用中的 和 待使用中的 兩部分,在使用中的 資料時排序好的,待使用中的 資料時未排序的,我...

經典排序演算法之 插入排序

插入排序的基本思想是將乙個記錄插入到已經排好序的有序表中,從而形成乙個新的有序表。對於少量元素的排序,插入排序是乙個有效的演算法。工作方式像許多人排序一副撲克牌,開始時,我們的左手為空並且桌子上的牌面向下。然後,我們每次從桌子上拿走一張牌並將它插人左手中正確的位置。為了找到一張牌的正確位置,我們從右...

經典排序 插入排序

插入排序 是利用第1次排序到第 p次排序,位置0到 p 1上的位置都是排序好的。這樣只要比較一下 i 1 和 i 就知道還要不要進入第 2個迴圈。如果 i 1 i 那麼就要繼續進入第二個迴圈。將這個位置的 i 存起來 temp 在令j i 開始迴圈交換位置,temp j temp j 1 這個時候進...