排序不難,但是有時候我們容易出錯,容易混淆等等,我們慢慢來分析,從最簡單的開始慢慢深入理解。
插入排序:
直接插入排序:每一步將乙個待排的記錄根據關鍵字的大小插入已經排好序的那部分裡邊去,直到所有的都插完為止。
我們來看例子來分析:
初始大小:57 68 59 52
1、第乙個數是57,就乙個數,所以就預設排好了,然後就把68插進來,發現68>57,就直接插在57後面,不需要任何的處理;得到: 57 68。
2、第三個數是59,我們發現了57<59<68,所以59就插在57之後,得到: 57 59 68。
3、最後乙個數是52,我們對比發現52<57,插在57之前,就完成了插入的排序。
也許有同學發現了,這麼簡單的排序,我一眼就能看的出結果,確實,很簡單,但是我們是為了強調這個排序演算法。
希爾排序
:是在直接插入排序的基礎上進行改進的乙個排序演算法,所以也叫插入排序。基本思想就是每次都是按照確定的間隔將元素分組,在每一組中進行直接插入排序,使得小的元素可以跳躍式的前進,然後逐步的將步長縮小,直到步長為1,然後等到這個序列基本有序之後,那麼我們就可以進行直接插入排序了。
其實不難,我們來看個例題就一目了然了:
1、我們看一下就明白,首先我們要折半,然後是每隔5個一組,進行組合,然後兩兩對比,我們只需要調整兩個數即可;
2、然後再折半後取奇數得3,我們就從28開始,每隔三個一組進行分類,這樣我們只需要對比三組數。
3、我們最後在原來的基礎上折半取奇數得1,然後我們就開始最後一次的排序,得到我們的結果。
選擇排序:
簡單選擇排序
:這個也不難理解,我們先來看乙個例子,就輕而易舉了:
既然是選擇排序,那麼還是需要一點點的選擇和對比的,我們來分析一下這個步驟:
1、首先我們要對比找到最小的元素,與第乙個交換。
2、繼續找繼第乙個之後最小的,與第二個交換。於此類推,我們就能完成簡單選擇排序。
我們接下來講一下堆排序,比較有意思的選擇排序;
堆排序:
一句話很通俗的一句話來概括:a.孩子結點都要大於父結點(小頂堆);b.孩子結點都小於父結點(大頂堆)。
然後我們再來理解堆排序就容易了:
k<=k2i且k1<=k2i+1或者k1>=k2i且k1>=k2i+1
接下來我們看乙個圖,用圖來分析比較形象具體:
我們可以看的出來,這是個小頂堆,因為孩子結點都要比父結點要大。很簡單吧。
要是讓我們對乙個數列進行以下排序,建立乙個大頂堆,我們應該怎麼做呢?我們來看看:
對數列建立大頂堆,步驟應該是:
1、按照這個順序來建立乙個完全二叉樹,
按照順序來一一對應來填補,然後我們就得到了:
我們發現7號葉子結點咱們沒有,所以就省了。
2.我們首先看n/2個結點是3號結點,就是56,它比其子節點84小,所以應該84和56位置對調,得:
得到:
3、我們看n/2-1個結點,就是2號結點,值為79,我們馬上能觀察的出來,他比兩個子節點都要大,所以不用調。
4、我們繼續看n/2-2個結點,就是1號結點,他比兩個子節點都小,所以把它和較大的子節點84對調:
得:
5.我們一眼就看的出來,經過調整的結點46<56所以我們先把他們對調了,得:
這樣就基本符合咱們的題目要求了。
但是我們需要的是有序的序列,所以我們還得繼續:
a.我們首先要處理頂,因為他的值最大,我們把他和編號最大的,6號結點值為46的對調,對調完成之後,我們還得把指標斷開,如:
我們就有了最大的元素了84了,然後我們發現對調完的頂是46,還有乙個比他大得多的79,所以我們得把他們兩換了,得:
接下來我們還是同樣的方法,把79和編號最大的40對調,得到:
然後我們又把40和56對調,然後再把剩下的對調,結果就出來了:
排序沒有想象中的那麼複雜,動手來分析一下就好多了。
js Array操作的最簡短最容易理解方法
array 的方法 1 array.join 把所有元素用符號鏈結成string返回,如果元素不是基本型別,先呼叫tostring.它對應string.split arr 1,2,true,3,4,5 arr.join 1 2 true 3 4 5 2 array.reverse 逆序排列陣列 ar...
最容易理解的中斷和異常
這裡是我想到的最容易分辨中斷和異常的案例。現在正在開一場 選秀,有主持人和各位要演唱的歌手。主持人 os 和選手 1程序 想要讓自己的聲音被所有人聽見,就必須要用話筒 cpu 且現場只有乙個話筒 cpu 當選手 1程序 使用話筒 cpu 的時候,話筒是藍色 os處於使用者態 當主持人 os 使用話筒...
最容易理解的REST,以及RESTful
url定位資源,用http動詞 get,post,delete,detc 描述操作。rest不是 rest 這個單詞,而是幾個單詞縮寫。rest描述的是在網路中client和server的一種互動形式 rest本身不實用,實用的是如何設計 restful api rest風格的網路介面 server...