**:
每天都在叫囂自己會什麼技術,什麼框架,可否意識到你每天都在被這些新名詞、新技術所迷惑,.net、
xml等等技術固然誘人,可是如果自己的基礎不紮實,就像是在雲裡霧裡行走一樣,只能看到眼前,不能看到更遠的地方。這些新鮮的技術掩蓋了許多底層的原理,要想真正的學習技術還是走下雲端,扎扎實實的把基礎知識學好,有了這些基礎,要掌握那些新技術也就很容易了。
要編寫出優秀的**同樣要紮實的基礎,如果
排序和查詢
算法學的不好,怎麼對程式的效能進行優化
?廢話不多說,本文要介紹的這些排序演算法就是基礎中的基礎,程式設計師必知!
1
、直接插入排序
(1)基本思想:在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排
好順序的,現在要把第n個數插到前面的有序數中,使得這n個數
也是排好順序的。如此反覆迴圈,直到全部排好順序。(2
)例項2
、希爾排序(也稱最小增量排序)
(1
)基本思想:演算法先將要排序的一組數按某個增量d(
n/2,n
為要排序數的個數)分成若干組,每組中記錄的下標相差
d.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量(
d/2)對它進行分組,在每組中再進行直接插入排序。當增量減到
1時,進行直接插入排序後,排序完成。(2
)例項:
3
、簡單選擇排序
(1
)基本思想:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換;
然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。(2
)例項:
4
、堆排序
(1)基本思想:堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。
堆的定義如下:具有n個元素的序列(h1,h2,...,hn),當且僅當滿足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)時稱之為堆。在這裡只討論滿足前者條件的堆。由堆的定義可以看出,堆頂元素(即第乙個元素)必為最大項(大頂堆)。完全二叉樹可以很直觀地表示堆的結構。堆頂為根,其它為左子樹、右子樹。初始時把要排序的數的序列看作是一棵順序儲存的二叉樹,調整它們的儲存序,使之成為乙個堆,這時堆的根節點的數最大。然後將根節點與堆的最後乙個節點交換。然後對前面(n-1)個數重新調整使之成為堆。依此類推,直到只有兩個節點的堆,並對它們作交換,最後得到有n個節點的有序序列。從演算法描述來看,堆排序需要兩個過程,一是建立堆,二是堆頂與堆的最後乙個元素交換位置。所以堆排序有兩個函式組成。一是建堆的滲透函式,二是反覆呼叫滲透函式實現排序的函式。(2
)例項:
初始序列:
46,79,56,38,40,84
建堆:交換,從堆中踢出最大數
剩餘結點再建堆,再交換踢出最大數
依次類推:最後堆中剩餘的最後兩個結點交換,踢出乙個,排序完成。
5
、氣泡排序
(1)基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。(2
)例項:
未完待續,第二篇將介紹剩餘3大排序,排序穩定性,複雜度(這句話過期,呵呵!)
程式設計師必知8大排序3大查詢
每天都在叫囂自己會什麼技術,什麼框架,可否意識到你每天都在被這些新名詞 新技術所迷惑,net xml等等技術固然誘人,可是如果自己的基礎不紮實,就像是在雲裡霧裡行走一樣,只能看到眼前,不能看到更遠的地方。這些新鮮的技術掩蓋了許多底層的原理,要想真正的學習技術還是走下雲端,扎扎實實的把基礎知識學好,有...
程式設計師必知8大排序3大查詢(一)
每天都在叫囂自己會什麼技術,什麼框架,可否意識到你每天都在被這些新名詞 新技術所迷惑,net xml等等技術固然誘人,可是如果自己的基礎不紮實,就像是在雲裡霧裡行走一樣,只能看到眼前,不能看到更遠的地方。這些新鮮的技術掩蓋了許多底層的原理,要想真正的學習技術還是走下雲端,扎扎實實的把基礎知識學好,有...
程式設計師必知8大排序3大查詢(一)
分類 軟體工程師基本功 2012 05 04 07 44 13273人閱讀 132 收藏舉報 第二篇 程式設計師必知8大排序3大查詢 二 每天都在叫囂自己會什麼技術,什麼框架,可否意識到你每天都在被這些新名詞 新技術所迷惑,net xml等等技術固然誘人,可是如果自己的基礎不紮實,就像是在雲裡霧裡行...