插入排序(英語:Insertion Sort)是一種簡單直觀的排序算法。它的工做原理是經過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,一般採用in-place排序(即只需用到 {\displaystyle O(1)} {\displaystyle O(1)}的額外空間的排序),於是在從後向前掃描過程當中,須要反覆把已排序元素逐步向後html
挪位,爲最新元素提供插入空間。算法
如:int arr[10] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5 };ide
第一趟:arr[0]和arr[1]比較,由於arr[0]<arr[1];故arr[0] = 22,arr[1] = 34;spa
第二趟:arr[1]和arr[2]比較,由於arr[1]>arr[2]; 故arr[1] = 3,arr[2] = 23;接着再拿arr[1]和arr[0]比較,由於arr[0]>arr[1];故arr[0] = 3,arr[1] = 22;3d
這樣子arr[0] arr[1] arr[2] 目前是排好了順序爲 3 22 34 .....code
第三趟:arr[3]和arr[4]比較,由於arr[3]<arr[4];故arr[3] = 32,arr[4] = 82不變.視頻
.........htm
當進行到最後一趟:arr[8]和arr[9]比較,由於arr[8]>arr[9];故arr[8] = 5,arr[9] = 37;arr[8]和arr[7]比較,由於arr[7]>arr[8],故arr[7]和arr[8]對換。blog
最後就完成了排序。總的來講就是每進行一次排序,前面的順序都是從小到大拍好的。如有不懂,請看下面的視頻。排序
過程演示:
1 #include <stdio.h> 2 3 void insertion_sort(int arr[], int len){ 4 int i,j,temp; 5 for (i=1;i<len;i++){ 6 temp = arr[i]; 7 for (j=i;j>0 && arr[j-1]>temp;j--) 8 arr[j] = arr[j-1]; 9 arr[j] = temp; 10 } 11 } 12 13 14 int main() { 15 int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 }; 16 int len = (int) sizeof(arr) / sizeof(*arr); 17 int i; 18 insertion_sort(arr, len); 19 20 for (i = 0; i < len; i++) 21 printf("%d ", arr[i]); 22 return 0; 23 }
若是實在是不理解,那麼觀看下面這個視頻應該會有所理解了。這個視頻仍是挺有意思的,請認真看完,若是不行就加速看也行。第一次看不懂就多看幾遍而後和代碼聯繫上。