插入排序 C語言實現

2021-09-02 21:29:45 字數 1424 閱讀 7520

插入排序很好理解,與實際生活緊密相連,或可以說是**於生活中的感悟。

插入排序是用的非常多的一種排序方法,因為在實際程式設計中,資料往往是排序好的

所以往排序好的資料中插入新數,此時用插入排序會特別快速。

假設十個人按排隊,從矮到高,你會怎麼排?

首先,第2人與第1人比,若2比1矮,那麼他們互換位置,否則不動,此時前兩位已經排好了

然後第3人站出來,看看前面哪個位置中,自己比左邊的高,右邊的矮,然後插進去,若是前面人中最高的,

就不動。此時前3人排好了,以此類推。

程式中要先用乙個變數儲存這個「站出來的」數。直到此數找到比ta矮的人,那時留出乙個空位,可以插入。

/*

在一維亂序的陣列中

使用插入排序,實現從小到大排列

*/#include int main(void)

; int n = sizeof(a)/sizeof(a[0]); // 陣列元素的個數

for(i=1; i= 0) && (a[j] > temp))

if(j != i-1)

/*j != i-1說明執行過上面while,並找到了位置,那麼插入

如果j = i-1,則說明沒有執行while,說明它與左邊比是最高的,不用換位置

*/ }

for(i=0; iint main(void)

; int i = 8; // 儲存陣列最大下標

int data = 0; //要插進來的數

scanf("%d",&data);

while((i>=0) && (a[i]>data)) // 找到data應插入的位置,並把該位置空出來

a[i+1] = data; // data插入該位置

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

printf("\n");

return 0;

}

氣泡排序是從左往右比,插入排序是從右往左比,但也是一輪輪比較

原序列中,從左邊第二個開始,每一輪比較乙個數,每個數以此與左邊所有數比較

左邊都是以排好的數列,該數與排好的數列逐個比較,最後插入,形成新有序數列。

此程式是手動指定了陣列長度為10,為何?陣列定長,若寫成  int a = ;

系統自動初始化陣列長度為9,你就無法擴充套件陣列a了,陣列的最後乙個元素將會向後覆蓋乙個int型未分配給它的記憶體空間。

綜上,程式猿需要手動維護陣列的長度,若可以動態擴充套件長度的話,

那麼就可定義成  int a = ;   這種形式。

可以通過 sizeof(a) / sizeof(a[0]) 獲取陣列中有意義的資料的長度,然後減一就是陣列最大下標。

若需要插入就動態擴充套件乙個int型空間即可。

動態陣列和鍊錶將會解決這個缺陷。

氣泡排序

選擇排序

插入排序

快速排序

C語言實現插入排序

插入排序 我在學習一些簡單的演算法,我用文字記錄我的進步。插入排序 其實就是在待排序列中找到,沒有排序好的元素,插入的適當的位置,本文以公升序為例,簡單的講解一下。直接看下面的 include stdio.h include stdlib.h include string.h void swap i...

C語言實現插入排序

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

插入排序(C 語言實現)

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