插入排序 C語言

2022-07-03 17:27:09 字數 1668 閱讀 4602

插入排序

插入排序(insertion-sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

(每步將乙個待排序的元素,按其排序碼大小插入到前面已經排好序的一組元素的適當位置上去,直到元素全部插入為止)

具體演算法描述如下:

1、將待排序序列第乙個元素看做乙個有序序列,把第二個元素到最後乙個元素當成是未排序序列;

2、取出下乙個元素,在已經排序的元素序列中從後向前掃瞄;

3、如果該元素(已排序)大於新元素,將該元素移到下一位置;

4、重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;

5、將新元素插入到該位置後;

6、重複步驟2~5。

排序過程示例如下圖:

**實現:

1

/*插入排序*/2

int num[5] = ;

3int

pos, cur;

4inti;5

int length = sizeof(num)/sizeof(num[0

]);6

7for (i = 1; i < length; i++)

816 num[pos + 1] = cur; //

將待排序元素插入陣列中

17 }

也可以寫成兩個for迴圈的形式,效果相同

1

/*插入排序*/2

int num[5] = ;

3int

cur;

4int

i, j;

5int length = sizeof(num)/sizeof(num[0

]);6

7for (i = 1; i < length; i++)

814 num[j + 1] =cur;

15 }

排序過程:以上面的例子來說排序的物件是 3,7,1,8,5 陣列長度為5,因為第乙個元素可以認為已經被排序,所以for迴圈的次數是:5(陣列長度) - 1 = 4

第一次for迴圈:

3>7不成立,插入待排序元素,陣列不變,此時有序序列為3,7

第二次for迴圈:

7>1成立,陣列變成3,7,7,8,5

3>1成立,陣列變成3,3,7,8,5

插入待排序元素,此時陣列為1,3,7,8,5,有序序列為1,3,7

第三次for迴圈:

7>8不成立,插入待排序元素,陣列不變,此時有序序列為1,3,7,8

第四次for迴圈:

8>5成立,陣列變成1,3,7,8,8

7>5成立,陣列變成1,3,7,7,8

3>5不成立,插入待排序元素,此時陣列為1,3,5,7,8,有序序列為1,3,5,7,8,排序完成

插入排序(C語言)

採用先確定數字然後找位置的方法。每次把最前面或最後面的沒有排好序的數字插入到已經排好序的數字中間合適的位置上。不斷把選擇好的數字和相鄰的數字做順序調整,直到它被放在合適的位置上。插入排序 include void insert sort int p num,int size int num 0,nu...

插入排序(c語言)

插入排序的基本思想是 每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。插入排序示例 void printfbuff datatype a,size t n 列印陣列 printf n void insertsort datatype a,size t...

C語言 插入排序

實現 精簡 插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為o n 2 實現過程 為了比較容易地理解插入排序,我們可以列出一組資料,比如 1,5,4,3,7 我列出了兩種方法分別說明插入排序的實現過程,你可以...