趁著過年這段時間,我將算法導論這本書看了一遍,感覺受益匪淺。著這里也根據算法導論中所涉及到的算法用java實現了一遍。
第一篇我們就從排序開始,插入排序的原理很簡單,就像我們玩撲克牌時一樣。如果手里拿的牌比他前一張小,就繼續向前比較,知道這張牌比他前面的牌打時候就可以插在他的后面。當然在計算機中我們相應的也需要將對比過的牌向后移一位才可以。
這里直接給出算法,相信很多程序員都感覺有些程序比我們的自然語言都要好理解。
public class Sort {
public void sort(int[] s){
if(s.length<1){
return ;
}
for (int i = 1; i < s.length; i++) {
int key =s[i];
int j=i-1;
while(j>=0&&s[j]>key){
s[j+1]=s[j];
j--;
}
s[j+1]=key;
}
}
public static void main(String[] args) {
Sort s=new Sort();
int[] st =new int[]{7,5,3,4,2,1};
s.sort(st);
for (int i = 0; i < st.length; i++) {
System.out.println(st[i]);
}
}
}
他的時間復雜度是o(n*n),是原址的(任何時候都需要常數個二外的元素空間存儲數據而歸并排序就是非原址的)