#
摘要: ** BTree.h二叉樹抽象類型
** 由給定的完全二叉樹形式存儲的數組(如"12345 6"),構造二叉樹
** 提供:復制構造函數和賦值操作符重載
** 遞歸和非遞歸形式的中、前、后序遍歷方法
** 求一個節點的父節點,左右兄弟結點的函數
** 求二叉樹深度和結點個數的函數
閱讀全文
摘要: * 根據給定的字符串構造一個排序二叉樹
* 從排序二叉樹中尋找最大值,最小值,不存在時拋出invalid_argument異常
* 從排序二叉樹中刪除某一元素,不存在時拋出invalid_argument 異常
* 往排序二叉樹中添加一個新元素
閱讀全文
摘要: 用strcpy和strncpy時的一些疑問答疑,含兩個函數的源代碼。
閱讀全文
摘要: 較全面分析sizeof:
1. 一些基本類型的vc6 sizeof結果
2. 結構體的內存對齊
3. 含位域的結構體介紹
4. 含位域的結構體的內存對齊(壓縮存儲和非壓縮存儲)
5. 嵌套結構體的sizeof
6. 類對象的sizeof
7. 通過代碼如何修改默認對齊模數
閱讀全文
摘要: 桶式排序是對一個有n個整型元素的數組a[n],其中對任意i,0 <= a[i] <= m的特殊排序算法。
可以對 n==m, n != m分別處理。寫代碼時需要注意的的是a[i]是訪問第i-1個元素,而非第i個。
n != m時,運行時間為O(m+n),輔助空間為O(m)
n == m時特殊處理,運行時間為O(N), 輔助空間為O(1)
閱讀全文
摘要: 歸并排序思路:將序列從中間分割成兩部分,分別遞歸歸并排序,后將兩個子序列合并。
歸并排序雖然是經典排序里比較最少的算法,但有大量的復制操作,還需要O(N)的輔助空間,從而一般不用于主存,也不利于c++編程。
Java中比較操作耗時多,而復制則耗時少,從而歸并排序是Java中主要排序方法。
而在C++ STL中快速排序是基本排序方法。
閱讀全文
摘要: 快速排序:確定一個樞紐元,一次遍歷后將數組劃分成兩個部分,第一部分均比樞紐元小,第二部分都比樞紐元大,然后對這兩個數組進行快速排序,是一種遞歸的方法
平均運行時間O(Nlog(N)),最壞運行時間O(N^2)
最壞情形:對于預排序的序列。
對與樞紐元相等的元素處理:
i,j都停止:會比較相等元素,但是可以劃分成長度相當的兩個子數組
i,j都不停止,不會比較相等元素,但是可能產生長度不平衡的兩個子數組(與樞紐元相等的元素較多時)樞紐元的選取:
1. 選取第一個元素做樞紐元:對于(部分)預排序的序列運行時間O(N^2)
2. 隨機生成樞紐元:能避免上述問題,但是產生樞紐元的代價高
3. 三數中值分割法:選取左端,右端,中間位置三個元素的中值
閱讀全文