111111 排序算法

歸併排序(穩定的 N*lgN)html

外排序(超出了內存範圍)算法

    如何用1G內存對10G數據進行排序?數組

        讀入1G數據到內存,用常規排序算法進行內排序,spa

        將排序後的數據寫入磁盤,.net

        重複上面的過程至關於對10G數據分紅10分,分別進行內排序,產生10個排序文件,htm

        分別將10個文件的前100M數據讀取到內存公1G進行排序後寫入最終的結果文件,blog

        依次讀取文件後面的數據,排序後追加到結果文件便可。排序

    求數組中的逆序對或個數?內存

 

    楊氏矩陣(矩陣每行和每列都是有序的)是一個MN的二維數組ast

        對楊氏矩陣作插入的方法是,將待插入數據與最大的數據進行比較,(矩陣中最大的數據是在角上)

        若是待插入數據比它小,再與橫向和縱向移動進行比較,相似冒泡方式,逐漸找到應該在的位置

 

非比較方案的排序:    計數排序/桶排序/基數排序

常見的七種排序算法解析

http://mp.weixin.qq.com/s/XD0T4zgLr58E3mPmGB_tpA

 

秒懂排序算法 

常見的快速排序、歸併排序、堆排序、冒泡排序等屬於比較排序在排序的最終結果裏,元素之間的次序依賴於它們之間的比較。每一個數都必須和其餘數進行比較,才能肯定本身的位置。
冒泡排序之類的排序中,問題規模爲n,又由於須要比較n次,因此平均時間複雜度爲O(n²)。在歸併排序、快速排序之類的排序中,問題規模經過分治法消減爲logN次,因此時間複雜度平均O(nlogn)
比較排序的優點是,適用於各類規模的數據,也不在意數據的分佈,都能進行排序。能夠說,比較排序適用於一切須要排序的狀況。

 

計數排序、基數排序、桶排序則屬於非比較排序非比較排序是經過肯定每一個元素以前,應該有多少個元素來排序。針對數組arr,計算arr[i]以前有多少個元素,則惟一肯定了arr[i]在排序後數組中的位置。
非比較排序只要肯定每一個元素以前的已有的元素個數便可,全部一次遍歷便可解決。算法時間複雜度O(n)
非比較排序時間複雜度底,但因爲非比較排序須要佔用空間來肯定惟一位置。因此對數據規模和數據分佈有必定的要求。

https://mp.weixin.qq.com/s/t0dsJeN397wO41pwBWPeTg

 

堆排序:

1.徹底二叉樹,一個結點i它的左孩子是2*i+1,右孩子是2*i+2

2.最後一層的最後一個葉子結點的父結點爲 (lastIndex-1)/2

所以先實現建立最大堆方法。

    從最後一層的最後一個葉子結點的父結點開始循環往回計算,這樣能夠遍歷全部的子結點和父結點的關係。在每一個結點處理過程當中將子結點的值(最多兩個)與父結點的值比較找出最大的,將其放在父結點,即最大堆的特色是,任何一個結點都比它的下面的節點值要大。注意若是父結點的值比子結點的值小進行交換,交換後可能打破下面的最大堆關係,因此交換後要繼續處理一遍子樹,保證它依舊符合最大堆條件。

最大堆建立完成後,根結點爲這顆樹的最大元素,所以將跟結點和最後一位交換,即最大值沉澱。而後將數組縮小一位,繼續建立最大堆,交換根結點與當前這個數組(比上面小一位)最後一位交換(最大值沉澱),所以最外層就是循環沉澱每一次的最大堆裏的最大值。

https://www.cnblogs.com/CherishFX/p/4643940.html

https://blog.csdn.net/jianyuerensheng/article/details/51263453

相關文章
相關標籤/搜索