排序演算法學習心得

2021-07-05 13:30:53 字數 1451 閱讀 3876

近期終於弄懂了六種演算法,寫個小部落格記錄下

一、六種演算法解析:

1、直接插入排序:

(2)、演算法特點:保證每一次遍歷後,前面的資料都是排序好的;

(2)、**:

public static int insert(int arr)

}arr[pos]=arr[i];

arr[i]=temp;

}return arr;

}3、氣泡排序:

(1)、演算法思想:從後往前,相鄰兩個數比較大小,將小的數排在大數的前面;

(2)、演算法特點:每一次遍歷都能得到當前最小值;

(3)、**:

public static int  bubble1(int arr)

if(key==arr[i])else if(key==arr[j])  

}while(ii)

return arr;

}注:開始學習時,總是弄不清楚關鍵字與兩個游標的關係,不清楚游標如何變化;

6、希爾排序:

(1)、演算法思想:希爾排序是直接插入排序的改良版,設定乙個d=n/2,每一次遍歷時都有d/=2;然後將原先要排序的數列分成若干小組,在組內進行直接插入排序;

(2)、演算法特點:每一遍歷後,總能在組內排序好;

(3)、**:

public static int shell(int arr)}}

}注:剛開始寫**時,只是將原先的數列根據d值分了很多小組,然後每個組內相鄰兩個資料比較大小,如果前面的比後面的大,則交換,後面的資料再與更後面的資料比較大小,卻沒有使用到插入排序中的演算法思想,交換後,原先後面的資料應該與更前面的資料繼續比較大小,直至找到合適的位置存放好;

二、排序演算法比較:

1、演算法的時間複雜度:

(1)、氣泡排序:max:o(n2);min:1;

(2)、選擇排序:o(n2);

(3)、插入排序:o(n2);

(4)、快速排序:max:o(n2);min:1;

(5)、堆排序:o(n2);

(6)、歸併排序:o(nlog2n);

2、演算法的穩定性:

(1)、穩定的演算法有:插入排序、氣泡排序、二叉樹排序、二路歸併排序以及其他線性排序;

(2)、不穩定的演算法有:選擇排序、希爾排序、快速排序和堆排序,希爾排序;

3、根據不同的情況選擇不同的演算法:

(1)、當n比較小,且對穩定性不作要求時,應用選擇排序;對穩定性有要求時,應選用插入排序或者氣泡排序;

(2)、當n比較大時,關鍵字元素比較隨機,對穩定性沒有要求的時候應用快速排序,希爾排序;

(3)、當n比較大時,關鍵字元素可能出現本身是有序的,且對穩定性有要求,空間允許的情況下,應使用歸併排序;

(4)、當n比較大時,關鍵字可能本身有序,但對穩定性沒有要求時,可使用堆排序;

回溯演算法學習心得

回溯演算法的原理 回溯演算法是一種選優搜尋法,按照選優條件向前搜尋,以達到目標。但當探索到某一步的時候,發現原先選擇並不優活著達不到目標的時候,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法。廢話不多說,直接上解決回溯演算法的框架。解決乙個回溯問題,實際上就是乙個決策樹的遍歷過程。你只需要思...

關於PCA演算法學習心得

壓縮的實質就是針對樣本的屬性,讓單個屬性的方差最大,讓樣本之間的協方差的為零。pca演算法的是針對原始樣本的協方差c的變換,通過對協方差矩陣c的對角化,找到對映後的樣本的協方差矩陣y。需要注意的是,此時d是對角陣,從而滿足了我們優化的要求 協方差為零,方差最大。d 1myy t1m px px t ...

小白演算法學習心得(c )

很長時間沒有寫部落格了,原因主要就是忙著上課或者是學習之類的。絕對不是貪玩 最近簡單的學習了一部分演算法,於是簡單的總結一下自己學習的經歷。前話在大一上學期,學長就開始教我們一些演算法,dp,貪心之類的,但是很長時間就是不了解為什麼要這樣寫,當時也被遞迴弄暈了很長很長時間,於是我寫下這篇簡單的自我學...