排序演算法2 插入排序

2021-09-02 08:14:58 字數 1184 閱讀 2964

插入排序的中心思想就是將乙個元素插入到已經排好序的陣列當中。

陣列a[n]

初始時,a[0]自成一格有序區,無序區為a[1…n-1] 令i = 1

將a[i]併入當前有序區a[0…i-1]中形成有序區間

i++並重複第二步直到 i == n -1

#include #include #include "myfunctions.h"

/* 陣列a[n]

1.初始時,a[0]自成一格有序區,無序區為a[1....n-1] 令i = 1

將a[i]併入當前有序區a[0...i-1]中形成有序區間

i++並重複第二步直到 i == n -1

*/void insert_sort(int a,int n)

else

*/if( a[j] < a[i] )

}//判斷j的位置是否是原來的位置,不是的話要將資料後移至j之後

if( j != i - 1 )

a[k + 1] = temp;

} //a[j] = temp; 上面 j == i的情況下a[j]會被賦值成上次的temp

// j == i 就不用換 }}

//優化上面的插入排序

void insert_sort2(int a,int n)

a[j + 1] = temp;

} }}//優化insert_sort2,不用前乙個資料覆蓋後乙個資料的方法,而是使用2個資料交換的方式

void insert_sort3(int a,int n)

// else

// //}

//優秀寫法 與上面的邏輯一模一樣

for( int j = i - 1 ; j >= 0 && a[j + 1] < a[j] ; --j)

} }}

int main()

; insert_sort3(a,10);

pjdprint(a,10);

system("pause");

return 0;

}

這裡偷了個小小的懶,我將swap函式和print函式放到了自己寫的函式檔案中,這樣就不用每次都寫一遍,嘿嘿。

我以前不是很了解,一直以為插入排序要開闢乙個與原陣列一樣大的空間,向其中插入資料。

這裡非常感謝morewindows的系列部落格白話經典演算法白話經典演算法

排序演算法 2 插入排序

插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序 直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中...

排序演算法 2 插入排序

思路是 每次從未排好的序列中選出第乙個元素插入到已排好的序列中。步驟可以大致歸納如下 1.從未排好的序列中拿出首元素,並把它賦值給temp變數 2.從排好的序列中,依次與temp進行比較,如果元素比temp大,則將元素後移 實際上放置temp的元素位置已經空出 3.直到找到乙個元素比temp小,將t...

排序演算法2 插入排序

插入排序是通過不斷插入待排序的元素完成整個排序過程。插入排序是一種很簡單的排序方式,基本思想就是將乙個元素插入到已經排序好的序列中,從而形成乙個新的有序序列。它重複地選擇未排序的元素,將其插入已經排序好的序列中,直到沒有待排序元素時,整個排序過程完成。插入排序的工作方式就像大家打撲克牌時抓牌一樣。開...