1. 程式人生 > >插入排序c遞迴實現和非遞迴實現

插入排序c遞迴實現和非遞迴實現

1.特點  :在部分有序的情況下,插入排序效率很高,和選擇排序 不一樣的是,排序的效率受輸入序列的影響很大

            平均時間複雜度O(n^2)       最好情況下  O(n)     最壞情況下O(^2)

2.程式碼實現   迭代的方式實現 

void insertSort(int a[],int N)
{
    if(a==NULL)return ;
    int i,j;
    //從第二個數進行掃描到N
    for(i=1;i<N;i++)
    {
        //和前一個比較,如果前一個大於當前(升序) 交換
        for(j=i;j>0 && a[j-1] > a[j];j--)
            exchange(a,j, j-1);
    }
}

 遞迴實現  :和迭代思路一致  利用了系統堆疊  不過有點脫褲子放P的感覺
void insertSort2(int a[],int N)
{
    if(a == NULL || N == 1)
        return;
    
    insertSort2(a, N - 1);
    
    
    for(int i = N-1;i>0 && a[i] < a[i-1];i--)
        exchange(a,i ,i-1);
}