關於排序演算法的一點知識 演算法思想

2021-06-16 11:31:57 字數 1442 閱讀 9518

1. 功能:選擇排序

思想:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。 

效能:不穩定的,演算法複雜度o(n^2)。

思想:在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。

效能:穩定的,演算法時間複雜度o(n^2)。

思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較

小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

效能:穩定的,演算法時間複雜度o(n^2)。

改進:記錄每一遍掃瞄後最後下沉數的位置k,這樣可以減少外層迴圈掃瞄的次數。

思想:在直接插入排序演算法中,每次插入乙個數,使有序序列只增加1個節點,並對插入下乙個數沒有提供任何幫助。如果比較相隔較遠距離(稱為增量)的數,使得數移動時能跨過多個元素,則進行一次比較就可能消除多個元素交換。d.l.shell於2023年在以他名字命名的排序演算法中實現了這一思想。演算法先將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然後再用乙個較小的增量對它進行,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。一般,初次取序列的一半為增量,以後每次減半,直到增量為1。

效能:希爾排序是不穩定的。

思想:快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃瞄只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。快速排序通過一趟掃瞄,就能確保某個數(以它為基準點)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。它是由c.a.r.hoare於2023年提出的。顯然快速排序可以用遞迴實現,當然也可以用棧化解遞迴實現。

效能:不穩定的,最理想情況演算法時間複雜度o(nlog2n),最壞o(n^2)。

思想:堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。 堆的定義如下:具有n個元素的序列(h1,h2,...,hn),當且僅當滿足(hi>=h2i,hi>=2i+1)或(條件的堆)。由堆的定義可以看出,堆頂元素(即第乙個元素)必為最大項。完全二叉樹可以很直觀地表示堆的結構。堆頂為根,其它為左子樹、右子樹。初始時把要排序的數的序列看作是一棵順序儲存的二叉樹,調整它們的儲存序,使之成為乙個堆,這時堆的根節點的數最大。然後將根節點與堆的最後乙個節點交換。再對前面(n-1)個數重新調整使之成為堆。依此類推,直到只有兩個節點 的堆,並對它們作交換,最後得到有n個節點的有序序列。從演算法描述來看,堆排序需要兩個過程,一是建立堆,二是堆頂與堆的最後乙個元素交換位置。此處講的是大頂堆,也可以建立小頂堆,方法類似。

效能:不穩定的,演算法時間複雜度o(nlog2n)。

關於wampserver的一點知識

1.wamp windows apache mysql php,一組法國人開發的用來搭建動態 或者伺服器的開源軟體。安裝極為簡便。可選擇中文語言。在瀏覽器中輸入 http localhost 站點目錄預設是www。2.關於url重寫的配置問題 url重寫 配置步驟 1 開啟apache的httpd....

關於賦值指向的一點知識

今天無意中看見知乎上的乙個提問,然後想了一下,看了看大神的回答,覺得很受益,特記錄 var a var b a 持有a,以回查 a.x a alert a.x undefined alert b.x 為什麼 a.x是undefinde?b.x是?下面是答案 var a 定義a,賦值為,假設指向儲存位...

彙編一點知識

bss段 bss段 bsssegment 通常是指用來存放程式中未初始化的全域性變數的一塊記憶體區域。bss是英文blockstarted by symbol的簡稱。bss段屬於靜態記憶體分配。data段 資料段 datasegment 通常是指用來存放程式中已初始化的全域性變數的一塊記憶體區域。資...