摘要: 內(nèi)存的三種分配方式:
1. 從靜態(tài)存儲區(qū)分配:此時的內(nèi)存在程序編譯的時候已經(jīng)分配好,并且在程序的整個運(yùn)行期間都存在。全局變量,static變量等在此存儲。
2. 在棧區(qū)分配:相關(guān)代碼執(zhí)行時創(chuàng)建,執(zhí)行結(jié)束時被自動釋放。局部變量在此存儲。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率高,但容量有限。
3. 在堆區(qū)分配:動態(tài)分配內(nèi)存。用new/malloc時開辟,delete/free時釋放。生存期由用戶指定,靈活。但有內(nèi)存泄露等問題。
閱讀全文
摘要: Quicksort是一個很好的比較排序算法,但是其最壞情況運(yùn)行時間是O(n^2), 還不如Mergesort的O(nlgn),
如何改進(jìn)Quicksort? 答案是:引進(jìn)隨機(jī)化思想。
一種方法: 對給定的待排序序列,隨機(jī)地重排列
另一種方法:隨機(jī)選取pivot
給出第二種方法的代碼
閱讀全文
摘要:
Order Statistics 順序統(tǒng)計
Select(int* a, int n, int ith): 從給定的n個元素中找出第i個小的元素
思想:QuickSort的Partition方法進(jìn)行分割
如果 i = rank(pivot), 則返回a[k]
如果 i < rank(pivot), 則從前半部分中找第i個小的元素
如果 i > rank(pivot), 則從后半部分中找第i-rank(pivot)個小的元素
最壞運(yùn)行時間O(n^2)
平均運(yùn)行時間O(nlgn)
閱讀全文