好久不學演算法了,好多東西都忘了,所以回來整理一下原來學過的東西,這裡排序都預設以公升序為例
先說3個簡單的,時間複雜度為o(n^2)
1.氣泡排序
將相鄰兩個數進行比較,如果後者較小,則交換,這樣每次結束後,都能將第i大的數放到正確的位置
2.選擇排序
第一次在0~n-1的範圍內尋找最小值,將其放到0號位置上,
第二次則在1~n-1的範圍內尋找最小值,將其放在1號位置上,
而後以此類推
3.插入排序
第一次將1號位置上的數與0號位置上的數進行比較,若1號位置上的數較小,則交換
第二次將2號位置上的數先與1號位置上的數進行比較,若其比1號位置上的數小,則交換,之後再與0號位置進行比較,若依舊比較小,則交換
而後以此類推
後面講相對麻煩些的4種演算法
4.歸併排序
這種演算法是把陣列中的數先看成若干個長度為1的區間,然後對相鄰的長度為2的區間進行排序,之後再對長度為4的區間進行排序,之後依次類推
5.快速排序
這種演算法是在陣列中隨機選擇乙個數,將整個陣列劃分為兩個區域,之後對左右兩個區域再次進行上述操作,依次遞迴,最終就能得到排好序的陣列
6.堆排序
先將陣列元素構成乙個大根堆
先將堆頂與堆末進行交換,將放在堆末的元素取出,之後對堆進行大根堆調整
重複上述過程,直至堆中沒有元素,則可得到排好順序的陣列
7.希爾排序
希爾排序是乙個優化的插入排序,其關鍵在於步長的選擇,以陣列長度為8為例,第一次可選擇步長為3進行排序
之後選擇步長為2進行排序,再選擇步長為1進行排序
堆排序演算法思路總結
堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法 大頂堆 每個節點的值都大於或等於其子節點的值,在堆排序演算法...
常見演算法思路總結
1.刪除單鏈表p指向的那個元素 有三個思路 1 前頭結點開始查詢,得到其前驅結點,然後刪除,此時時間複雜度為o n 2 利用雙向鍊錶,此時時間複雜度為o 1 3 當該結點不是鍊錶尾部元素時,將它後面的結點值儲存起來 賦給p 刪除其結點 當該結點是最後乙個元素時,從頭結點遍歷,此時時間複雜度為o n ...
歸併排序思路總結
歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併排序是一種...