死磕演算法之插入排序

Java學習錄發表於2018-06-29

學習更多演算法系列請參考文章:死磕演算法之彙總篇

相信大家都有打撲克的經歷,那麼我們今天的插入排序就以拿牌為例開始講(注意只是舉例,不是按打牌的規則哦)


1.我們拿到了一張牌3,我們把它放手裡,現在手裡有牌[3]

2.我們拿到了一張牌1,拿它與手裡最後一張牌也就是3比較,發現1比3小,所以我們把它插入到3的前面,現在手裡有牌[1,3]

3.我們拿到了一張牌0,拿它與手裡最後一張牌也就是3比較,發現0比3小,所以我們把它插入到3的前面,接著與3的上一張比較發現0比1還小,那麼就把0在插入到1的前面,現在手裡有牌[0,1,3]

4.我們拿到了一張牌2,拿它與手裡最後一張牌也就是3比較,發現2比3小,所以我們把它插入到3的前面,接著與3的上一張比較發現2比1大,那麼就不需要動了,現在手裡有牌[0,1,2,3]

5.我們拿到了一張牌8,拿它與手裡最後一張牌也就是3比較,8比3大,那麼就不需要動了,現在手裡有牌[0,1,2,3,8]

6.。。。

現在你明白什麼叫做插入排序了麼?

如果你不明白的話也沒關係,我還專門畫了一張圖:


死磕演算法之插入排序

接下來上程式碼

int []num=new int[]{3,1,0,2,8,4,2};
for (int i=1,n=num.length;i<n;i++){
    if(num[i]<num[i-1]){
        for (int j=i;j>0;j--){
            if(num[j]<num[j-1]){
                int temp=num[j];
                num[j]=num[j-1];
                num[j-1]=temp;
            }
        }
    }
}
for (int i:num){
    System.out.print(i+",");
}
複製程式碼

插入排序講完了。在這裡溫馨提示大家,學習演算法時,我們沒必要拘泥於程式碼的實現,那沒有意義。我的建議就是深入理解步驟,當你理解步驟以後程式碼是隨你怎麼玩都可以的。


相關文章