C語言實現插入排序

2021-08-18 14:38:46 字數 1258 閱讀 7350

插入排序是排序演算法的一種,它不改變原有的序列(陣列),而是建立乙個新的序列,在新序列上進行操作。

這裡以從小到大排序為例進行講解。插入排序的基本思想是,將元素逐個新增到已經排序好的陣列中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好的陣列是仍然有序的。

在實際使用中,通常是排序整個無序陣列,所以把這個無序陣列分為兩部分排序好的子陣列和待插入的元素。第一輪時,將第乙個元素作為排序好的子陣列,插入第二個元素;第二輪,將前兩個元素作為排序好的陣列,插入第三個元素。以此類推,第i輪排序時,在前i個元素的子陣列中插入第i+1個元素。直到所有元素都加入排序好陣列。

下面,以對 3  2  4  1 進行選擇排序說明插入過程,使用j記錄元素需要插入的位置。排序目標是使陣列從小到大排列。

第1輪[ 3 ]  [ 2  4  1 ]  (最初狀態,將第1個元素分為排序好的子陣列,其餘為待插入元素)

[ 3 ]  [ 2  4  1 ]  (由於3>2,所以待插入位置j=1)

[ 2  3 ]  [ 4  1 ]  (將2插入到位置j)

第2輪[ 2  3 ]  [ 4  1 ] (第1輪排序結果)

[ 2  3 ]  [ 4  1 ] (由於2<4,所以先假定j=2)

[ 2  3 ]  [ 4  1 ] (由於3<4,所以j=3)

[ 2  3  4 ]  [ 1 ] (由於4剛好在位置3,無需插入)

第3輪[ 2  3  4 ]  [ 1 ] (第2輪排序結果)

[ 2  3  4 ]  [ 1 ] (由於1<2,所以j=1)

[1  2  3  4 ]    (將1插入位置j,待排序元素為空,排序結束)

選擇排序對大小為n的無序陣列r[n]進行排序,進行n-1輪選擇過程。首先將第1個元素作為已經排序好的子陣列,然後將剩餘的n-1個元素,逐個插入到已經排序好子陣列;。因此,在第 i輪排序時,前i個元素總是有序的,將第i+1個元素插入到正確的位置。

#includeusing namespace std;

#define n 11

void insert_sort(int a,int n)

while (i!=j) //插入元素到插入位置

a[j] = temp; }}

int main()

; insert_sort(array,n);

for (int i = 0; i < n; i++)

cout << array[i]<<" ";

cout << endl;

}

C語言實現插入排序

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

插入排序(C 語言實現)

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

插入排序 C語言實現

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