插入法排序

2022-07-17 12:48:18 字數 1762 閱讀 8233

插入法排序較為複雜,其基本工作原理是抽出乙個資料,在前面的資料中尋找相應的位置插入,直到完成排序。以數字9、6、15、4、2為例,採用插入法實現數字按從小到大進行排序,插入法排序過程如圖8.23所示。

圖8.23  插入法排序過程示意圖

從圖8.23可以發現,在第一次排序過程中將第乙個數取出來,並放置在第乙個位置;然後取出第二個數,並將第二個數與第乙個數進行比較,如果第二個數小於第乙個數,則將第二個數排在第乙個數之前,否則將第二個數排在第乙個數之後;然後取出下乙個數,先與排在後面的數字進行比較,如果當前數字比較大則排在最後,如果當前數字比較小,還要與之前的數字進行比較,如果當前數字比前面的數字小,則將當前數字排在比它小的數字和比它大的數字之間,如果沒有比當前數字小的數字,則將當前數字排在最前方;依此類推,不斷取出未進行排序的數字與排序好的數字進行比較,並插入到相應的位置,直到將一組數字按從小到大排序為止。

下面通過例項來看一下如何通過程式使用插入法實現陣列元素從小到大的排序。

例項 利用插入排序法,從少到多輸出顯示老年人的數量

**福利,根據老年人數發放養老補助。在本例項中,宣告了乙個整型陣列和兩個整型變數,其中整型陣列用於儲存使用者輸入的數字,而兩個整型變數分別作為兩個元素交換時的中間變數和記錄陣列元素位置,然後通過雙層迴圈進行插入法排序,最後將排好序的陣列進行輸出。具體**如下:

01  #include/*

包含標頭檔案

*/02

int main() /*

主函式main

*/03

1415

/*從小到大排序

*/16

for(i=1;i<10;i++) /*

迴圈陣列中元素

*/17

25 a[ipos+1] =itemp;26}

2728

/*輸出陣列

*/29

for(i=0;i<10;i++)

3035 printf("\n"

);36

37return

0; /*

程式結束

*/38 }

執行程式,顯示結果如圖8.24所示。

圖8.24  插入法排序執行圖

從該例項**和執行結果可以看出:

(1)宣告乙個整型陣列a,並通過鍵盤為陣列元素賦值。

(2)設定乙個巢狀迴圈,第一層迴圈為後9個陣列元素,將第二個元素賦值給中間變數,並記錄前乙個陣列元素的下標位置。在第二層迴圈中,首先要判斷是否符合迴圈的條件,允許迴圈的條件是記錄的下標位置必須大於等於第乙個陣列元素的下標位置,並且中間變數的值小於之前設定下標位置的陣列元素,如果滿足迴圈條件,則將設定下標位置的陣列元素值賦值給當前的陣列元素。

(3)然後將記錄的陣列元素下標位置向前移動一位,繼續進行迴圈判斷。內層迴圈結束以後,將中間變數中儲存的數值賦值給當前記錄的下標位置之後的陣列元素,繼續進行外層迴圈,將陣列中下乙個陣列元素賦值給中間變數,再通過內層迴圈進行排序。

(4)依此類推,直到迴圈結束,這時就將陣列元素按照從小到大的順序重新排列了。

(5)迴圈輸出陣列中的元素,並在輸出5個元素後進行換行,在下一行輸出後面的5個元素。

插入法排序

static void insertsort int nums 挪位置 for int k i 1 k index k 插入 nums index insert static void main string args console.writeline 排序前的陣列 foreach var n i...

03插入法排序

插入法排序有個例子講的形象,比如玩撲克牌,插入排序可以用打牌時對摸起的牌根據牌的點數來對其進行插入排列來描述。可以把左手中的牌比做已經摸起的牌,即已經被排列好的牌,左手可以容納的牌數的空間可以假想為和要摸的牌的總數相同 而在桌子上的那部分沒摸的牌則是未被排序的牌,這二者的關係可以抽象為陣列中已經被排...

插入法排序演算法

它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。package com.hikversion.controller.sort public class i...