排序算法——插入排序(C語言實現)

  原理

默認數組的第一個數據是有個有序數組,由於只有一個數據,肯定是有序隊列。從亂序數組的第二個位置開始,與之前的有序數組中的數據依次作比較,找到合適的位置將該數據插入有序數組,直到將最後一個數據插入有序數組中,排序結束。

  分析

由於在最壞的情況下,有序數組中的數據在每次插入操作時,都會被比較一次,所以在最壞的情況下,該排序算法的時間複雜度爲On2);在最好的情況下,數據基本有序,其時間複雜度爲On);由於其在原數組上操作,所以空間複雜度爲O1)。

  改進

將某個數字插入有序數組的時候,可以採用二分法查找該數字的合適插入位置。

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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章