第八章:線性時間排序
比較排序的時間下界是:o(n lg n)
因此該章講述的都不是基於比較的排序
記數排序:假設n 個輸入元素介於0-k之間
counting-sort(a,b,k) //存放於b中
for (i = 0 ; i <= k ; i ++) c[i]m = 0;
for (i = 1; i <= length[a]; i ++)c[ a[i] ] ++;
for (i = 1; i <= k; i ++) c[i] = c[i] + c[i - 1]; //包含小於等於i的元素個數
for( i =1; j <= length[a]; i ++)[
b[ c[ a[i] ] ] = a[i];
c[ a[i] ] --;
}//o(n) while k~o(n)
基數排序:
radix-sort(a, d)//d是數字的位數
for(i = 1; i <= d; i++)
use counting-sort to sort array a on digit i;
//o(n)
需要把高位相同的分成一組比較,而不能一起比較了
桶排序:
bucket-sort(a)//注意,它的期望執行時間是o(n)
第九章:中位數和順序統計學
研究:輸入:乙個包含n個不同的數的幾何a和乙個數i, 1<= i <= n
輸出:a中元素x,它恰好大於a中其他 i - 1 個元素(第i個順序統計量)
最大值,最小值 o(n)
同時求 o(n)
這裡寫一下同時求的演算法
max-min(a)
else
for(i = begin; i < n; i+=2)// 3*n/2
用線性時間求第i個順序統計量
randomized-select(a, p, r, i){
if(p == r)return a[p]
q = ramdom-partition(a, p, r);
k = q - p + 1;
if( k == i)return a[q];
else if(i < k) return ramdomized-select(a, ,p , q - 1 , i );
else return ramdomized-select(a, ,q +1 , r , i );
演算法導論 第九章
這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以2分序列,這樣會有更好的效率。這章主要介紹如何不排序來找到序列的順序,由於不需要排序,可以減少很多比較的操作,最終可以獲得一些線性的演算法,得到排名第i的數字。演算法的基礎是首先...
第八,九章 BOM,客戶端檢測
bom的核心物件是window,表示瀏覽器的乙個例項。在網頁上,將window看作global物件。moveto 10,10 moveby 10,10 移動瀏覽器視窗到螢幕位置 設定瀏覽器頁面視口大小 clientwidth與clientheight window.open 開啟新視窗 有彈窗安全限...
演算法導論第十九章二項堆
自己寫的bug應該很多 binheapnode.h includeusing namespace std class binheap class binheapnode binheapnode void destory binheap.h include binheapnode.h class bi...