學習更多演算法系列請參考文章:死磕演算法之彙總篇
相信大家都有打撲克的經歷,那麼我們今天的插入排序就以拿牌為例開始講(注意只是舉例,不是按打牌的規則哦)
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+",");
}
複製程式碼
插入排序講完了。在這裡溫馨提示大家,學習演算法時,我們沒必要拘泥於程式碼的實現,那沒有意義。我的建議就是深入理解步驟,當你理解步驟以後程式碼是隨你怎麼玩都可以的。