C語言實現插入排序

2021-07-10 13:44:15 字數 1336 閱讀 6765

插入排序 :我在學習一些簡單的演算法,我用文字記錄我的進步。

插入排序 其實就是在待排序列中找到,沒有排序好的元素,插入的適當的位置,本文以公升序為例,簡單的講解一下。

直接看下面的**:

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

void swap(int array, int i, int j)

void printarray(int array, int len)

else

} }}void insert_sort(int array, int len)

array[k] = tmp;//元素插入

}}int main()

; int len = sizeof(array) / sizeof(*array);

printarray(array, len);

insert_sort(array, len);

printarray(array, len);

system("pause");

return 0;

}

簡單說明:

insert_sort  核心就是這個函式,就是要把  待排集合中的第乙個數字 記錄下來,放到了臨時變數tmp 中 ,for 外迴圈 ,從1 --> length-1 ,內迴圈j 從 i-1 --->0 遞減, 

如果 j > 0  並且 arr[j]>tmp  ,即待排數字, 就要把arr[j] 的值往後移動一下,同時要更新k ,記錄 tmp 最後 要放入的位置。 arr[j]  往後移動後,arr[j]  和arr[j+1] 是相同的值,

但是 tmp 已經 記錄了 arr[j+1] 的值, 所以不用擔心。內迴圈完成後,說明 k 的值找到了,tmp 的值 賦給  arr[k] 即可。 

insert_sort2  是第二種實現, 其實 和第一種 幾乎一樣, 外迴圈 也是 x 從 1 ----> length-1  , 內迴圈 i  從  x-1  ---> 0    這兩個 迴圈完全一樣, 不同的是:

arr[i] > arr[i+1]    也是判斷這個 如果 後面的數字 比前面的大, 那肯定要 「移動」, 但是這個是直接交換, 思想就是 邊交換,邊尋找位置, 交換完成, 位置也就放到正確位置。

而演算法insert_sort  ,採用 先找位置,之後 把值放到相應的位置。分兩步。  insert_sort  是邊交換,邊找位置,同時進行,最後交換完成,位置剛好找好。

結果如下:

C語言實現插入排序

插入排序是排序演算法的一種,它不改變原有的序列 陣列 而是建立乙個新的序列,在新序列上進行操作。這裡以從小到大排序為例進行講解。插入排序的基本思想是,將元素逐個新增到已經排序好的陣列中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好的陣列是仍然有序的。在實際使用中,通常是排序整個無序陣列,所...

插入排序(C 語言實現)

插入排序分為直接插入排序和折半插入排序,直接插入排序利用遍歷的方式查詢插入位置,時間複雜度為n 2,直接插入法由於不會改變相同元素的相對順序,所以直接插入排序是一種穩定的排序演算法。折半插入排序 二分插入排序 折半插入利用二分法查詢插入位置,只是減少了查詢比較的操作,所以其時間複雜度仍為n 2,二分...

插入排序 C語言實現

插入排序很好理解,與實際生活緊密相連,或可以說是 於生活中的感悟。插入排序是用的非常多的一種排序方法,因為在實際程式設計中,資料往往是排序好的 所以往排序好的資料中插入新數,此時用插入排序會特別快速。假設十個人按排隊,從矮到高,你會怎麼排?首先,第2人與第1人比,若2比1矮,那麼他們互換位置,否則不...