近期終於弄懂了六種演算法,寫個小部落格記錄下
一、六種演算法解析:
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,貪心之類的,但是很長時間就是不了解為什麼要這樣寫,當時也被遞迴弄暈了很長很長時間,於是我寫下這篇簡單的自我學...