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