二分插入排序

二分插入排序實際上是對插入排序的優化。
(1)算法思想
根據插入排序的思想,在插入待排序列的第i個元素時,由於前面的序列已經有序,因此可以使用二分法尋找第i個元素的正確位置。
(2)僞代碼:
BinInsertSort(int a[], int n)
{
        int key, left, right, middle;
        for (int i=1; i<n; i++)
        {
                key = a[i];
                left = 0;
                right = i-1;
                while (left<=right)
                {
                        middle = (left+right)/2;
                        if (a[middle]>key)
                                right = middle-1;
                        else
                                left = middle+1;
                }
                
                for(int j=i-1; j>=left; j--)
                {
                        a[j+1] = a[j];
                }
                
                a[left] = key;        
        }
}
 
(3)分析
1)穩定
2)空間代價:Θ(1)
3)時間代價:
插入每個記錄需要Θ(log i)比較,最多移動i+1次,最少2次
最佳情況Θ(nlog n),最差和平均情況Θ(n^2)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章