原理算法
默認數組的第一個數據是有個有序數組,因爲只有一個數據,確定是有序隊列。從亂序數組的第二個位置開始,與以前的有序數組中的數據依次做比較,找到合適的位置將該數據插入有序數組,直到將最後一個數據插入有序數組中,排序結束。數組
分析ide
因爲在最壞的狀況下,有序數組中的數據在每次插入操做時,都會被比較一次,因此在最壞的狀況下,該排序算法的時間複雜度爲O(n2);在最好的狀況下,數據基本有序,其時間複雜度爲O(n);因爲其在原數組上操做,因此空間複雜度爲O(1)。spa
改進orm
將某個數字插入有序數組的時候,能夠採用二分法查找該數字的合適插入位置。排序
C語言實現(原始插入排序)隊列
void swap(void *a, void *b, int size) { void *tmp = Malloc(size); memcpy(tmp, a, size); memcpy(a, b, size); memcpy(b, tmp, size); free(tmp); } Boolean insert(int *arr, int arrlen) { int i = 0, j = 0; if(NULL == arr || 0 >= arrlen){ printf("Invalid input...\n"); return FALSE; } for(i = 1; i < arrlen; ++i){ for(j = i - 1; j>=0; --j){ if(arr[j+1] < arr[j]){ swap(arr+j+1, arr+j, sizeof(arr[i])); } } } return TRUE; }