年後上班的第二天,從目前來看的話班上自己可以用來學習的時間真的是極其有限,昨天自己整個班上的任務就是寫了自己小說的第一章,白天沒有寫任何的代碼,晚上抽空補了一部分項目的源代碼(動態驗證碼工具類的書寫)並且練習了已經淡忘的Git操作。今天一樣如此,上午學習了插入排序和希爾排序,感覺自己的思維能力越來越差了,下午去現場幹活,拖拖拉拉就是一下午(不足的地方就是如果把閒聊的時間利用起來可以至少擠出兩個小時的時間,時間觀念,學習觀念淡薄),所以每週自己可以用來硬性學習的時間就是週六日兩天,還有就是每天的早晨和晚上,白天的話可以擠出來的時間極度有限,而且從學習靈活度來看的話班上更好的學習方式是閱讀,思考性的,代碼性的東西應該更多的放在自由可支配的時間片上(早晨大概可以擠出兩個小時,晚上的話三個小時),班上的話上午時間要充分利用,現場時間要充分利用,主要的學習方式就是看書籍,看博客,閱讀性學習,另外每週要給自己定下三個極限,編碼極限,看書極限,思考極限,週六日是學習的高潮也是實現自己每週任務的關鍵。
插入排序的核心理解
插入排序是一種比較好理解的排序算法,在排序之前我們需要明確的是待插入數據左邊的所有數據都是已經排好序的數組,用幾句核心的話來理解插入排序就是:1. 待插入數據取出(哨兵位賦值給temp)。2. 比哨兵位數據大的後移(由於哨兵位左邊是已經排好序的數列只要出現一個小於哨兵位數據,左邊其他的數據便小於該位)。3. 將哨兵位的數據賦值給最後一個後移位。
代碼實現
public class ArithmeticUtil{
public static int[] insertSort(int[] a){
int len=a.length;
int i,j;
for(i=1;i<len;i++){
int insertNum=a[i];
j=i-1;
while(j>=0&&a[j]>insertNum){
a[j+1]=a[j];
j--;
}
a[j+1]=insertNum;
}
return a;
}
//引入第三個變量
public static int[] insertSort2(int[] a){
int len=a.length;
for(int i=1;i<len;i++){
int insertNum=a[i];
int b=0;
int j=i-1;
for(;j>=0;j--){
if(a[j]>insertNum){
a[j+1]=a[j];
b++;
}
}
a[i-b]=insertNum;
}
}
}