原理
默認數組的第一個數據是有個有序數組,由於只有一個數據,肯定是有序隊列。從亂序數組的第二個位置開始,與之前的有序數組中的數據依次作比較,找到合適的位置將該數據插入有序數組,直到將最後一個數據插入有序數組中,排序結束。
分析
由於在最壞的情況下,有序數組中的數據在每次插入操作時,都會被比較一次,所以在最壞的情況下,該排序算法的時間複雜度爲O(n2);在最好的情況下,數據基本有序,其時間複雜度爲O(n);由於其在原數組上操作,所以空間複雜度爲O(1)。
改進
將某個數字插入有序數組的時候,可以採用二分法查找該數字的合適插入位置。
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; }