基礎演算法複習篇(一) 插入排序演算法

2021-08-31 17:13:03 字數 1474 閱讀 5342

經過乙個假期對基礎演算法知識的學習,總算在近期告一段落,正好在剛開學的這一段冷卻期,為了加深對演算法的記憶與理解,準備對假期所學習的演算法知識進行一定的總結與分析,算是對前一階段所學知識的總結吧,也許在這期間還能發掘出當初沒有想到的想法,算是很隨性的總結吧,那麼從今天開始,便由淺入深的對基本的演算法進行一定的複習。

在這篇文章中將介紹乙個非常簡單的排序演算法—插入排序演算法(insertionsort)。插入排序的演算法的核心便在於原地排序。所謂原地排序指的是,在演算法的執行過程中,在待排序物件的容器外僅僅有確定個數的物件。就像我們在桌子上放了一副撲克牌,我們想把每張牌按照牌上數字的大小按照非降序順序排列之後堆疊在桌上,那麼什麼叫原地排序呢,我們把放牌堆的桌子認為是盛放牌的容器,我們的雙手認為是牌堆之外的空間,我們在排序的過程中,每次僅僅在牌堆裡面取得1張牌和牌堆裡面的撲克牌進行比較後找到其應當所在的位置之後放回牌堆,然後再取下一張牌~~~如此反覆,在演算法的每一步在手中牌的數目是一定的,當然不一定非要是一張啦。這麼做的好處便是能夠有效的節省記憶體的占用,如果系統的記憶體資源緊張,這麼做的意義是非常明顯的。

那麼我們首先對演算法的具體步驟進行介紹,該演算法的**實現如下:

public class insertionsorttest 

tempnumbers[targetindex + 1] = target;//當待比較元素小於目標元素時,講目標元素插入至待比較元素之後

} return tempnumbers;//返回已排列好的陣列

} /**

* @param args

*/public static void main(string args) ;

int targetnumbers = insertionsorttest.insertionsort(tempnumbers);

system.out.println(arrays.tostring(targetnumbers));

}}

演算法的執行過程很簡單,具體步驟的意義已經在注釋中進行了解釋,總體的執行過程就像給撲克排序一樣,把元素容器的第二個元素開始的元素作為目標元素,把目標元素與之前的元素進行比較,把之前的元素作為待比較元素若待比較元素大於目標元素便把待比較元素後移一位,並把它原來的前乙個元素作為新的待比較元素,直到待比較元素小於目標元素,便把目標元素插入至待比較元素之後。在演算法的整個過程中在元素容器之外的元素只有乙個當前的目標元素,因此這種排序方法是原地的,能夠有效的節省記憶體的使用。

然而這種演算法也有其缺點,那就是只適合小規模資料的排序,對於大規模資料的排序效率便不令人滿意了,因為其時間複雜度是o(n2)級別的,既然是n方級別的,那麼隨著輸入資料數量級的增長,其排序所需時間的增長過於巨大,效率不能令人滿意。在處理小規模資料的過程中效率還是可觀的,因此,有人的想法便是利用分治法將大規模的資料分解成小規模的資料集,進行排序之後再進行排序。

雖說演算法的效率不算太高,不過畢竟是入門演算法,而且實現簡單,在平時資料量很小時還是能很好的解決問題的,至於比較高效的演算法,實現複雜度也會相應的提高,那麼我們應該在以後的文章中能夠見到。

演算法 一 插入排序

插入排序演算法類似於玩撲克時抓牌的過程,玩家每拿到一張牌都要插入到手中已有的牌裡,使之從小到大排好序。撲克牌的插入排序 也許你沒有意識到,但其實你的思考過程是這樣的 現在抓到一張7,把它和手裡的牌從右到左依次比較,7比10小,應該再往左插,7比5大,好,就插這裡。為什麼比較了10和5就可以確定7的位...

排序演算法(一) 插入排序

首先,對排序演算法 輸入 n 個數 輸出 序列的乙個排序,使得a1 a2 an 待排序的數為key 插入排序演算法,是乙個對少量元素進行排序的有效演算法.其偽 如圖 插入排序演算法在形式上類似於我們平時打牌時,邊抽牌邊整理撲克牌的順序,我們將新的牌與手中已經整理好順序的撲克牌進行比較,最終將抽到的牌...

排序演算法(一) 插入排序

一 插入排序 直接插入 二分插入 希爾排序 基本思想 從前面已經排序好的資料中查詢合適的位置,將待排序資料插入到該位置 從後面向前找合適的位置 1 直接插入排序 基本思想 從右向左查詢 從左邊已排序好的資料中查詢合適的位置,插入待排序的資料。private static void derictins...