排序與順序統計量 排序,就是把無序的對象,按照某些關鍵字,排列,使存儲的順序和關鍵字的大小之間存在一定關係。第i個順序統計量就是,存儲順序中的第i個。
排序 (具體算法網站,http://www.cs.usfca.edu/~galles/visualization/Algorithms.html 我也是在網上看到的哦,不記得是誰發的了,如果作者看到,可以聯繫我)
第六章,堆排序,原址排序
- 堆,一棵完全二叉樹(滿二叉樹的右下角的最後一行缺了一些)。與二叉樹的生成不同,堆從下往上生成,容易保證它是完全二叉樹的性質。插入結點也是從下往上調整。
- 但是,堆排序的時候,是總是把根結點和最後一個葉子結點對換,再從上往下調整的。
第七章,快速排序(不穩定)
- 最常用的算法,原址排序,與其他O(nlogn)算法比有最小的常數因子。依賴於主元的選擇,可以用隨機化減少最壞情況發生的概率。
第八章,線性時間排序。 時間減少的原因 1. 對處理的對象有限定 2. 空間換時間
- 由決策樹推出,比較算法的下界 nlogn,也就是說,如果一個排序算法是基於比較的,那麼,不可能比nlogn更少的時間了,最多就在常數因子上有進步
- 計數排序 排序對象限定:某一個範圍內的可數個對象,比如,整數[1~k]。 空間消耗:非原址排序,以整數[1~k]爲例,空間爲 k+n。 算法時間中的k就是範圍,n是需要排序的數的個數
- 基數排序 排序對象限定:1. 可以一位一位的排 2.一般基數排序是用計數排序作爲基礎排序的,所以,某一範圍內的可數個對象。以多位數的整數爲例,基數排序的思想就是,個位十位...這樣的排。因此,它所用的基礎排序直接影響到了它的性能。 算法時間中的d是位數。
- 桶排序 排序對象限定:均勻分佈 空間消耗:非原址排序。 將數據映射到n個桶中,如果服從均勻分佈的條件,桶的大小會趨於1。因此平均情況時間複雜度是O(n)
第九章,中位數和順序統計量
- 特殊的順序統計量,最大值和最小值。 單個確定,必須有n-1次比較才能確定。
- 基於快速排序的順序統計量確定。期望時間O(n)。快速排序之所以適合做這件事,1. 每次都能確定一個順序統計量 2.方便剪枝。 個人覺得歸併排序應該是幹不了這活的
- 分治算法,將數據5個5個分組,找中位數,找中位數,剪枝,遞歸。最壞時間複雜度O(n)。雖然沒有驗證過,但這個5,應該是有點講究的。這是比快速排序剪枝策略更好的算法