每天都在叫囂自己會什么技術,什么框架,可否意識到你每天都在被這些新名詞、新技術所迷惑,.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大排序,排序穩定性,復雜度(這句話過期,呵呵!)
希望大家多多支持!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
