public class Insert_Sort {
public int[] Sort(int data[]){
for(int i=1;i<data.length;i++){
int key=data[i];
int j=i-1;
while(j>=0&& data[j]>key){
data[j+1]=data[j];
j--;
}
data[j+1]=key;
}
return data;
}
}算法
時間複雜度:最佳狀況下:O(n),最壞狀況下:O(n^2) 參考算法導論數組
影響因素:存儲的數據結構數據結構
設想優化1:運用折半思想:優化
public int[] Sort(int data[]){
for(int i=1;i<data.length;i++){
int key=data[i];
int j=i-1;
int half=i/2;
if(data[half]<key){
while(j>=half&&data[j]>key){
data[j+1]=data[j];
j--;
}
}else if(data[half]>key){
while(j>=0&&data[j]>key){
data[j+1]=data[j];
j--;
}
}
data[j+1]=key;
}
return data;
}class
結果優化失敗,緣由:須要後移的次數與比較次數無關,數組的數據結構決定了其插入特性。鏈表
設想優化2:採用雙向鏈表插入。。。。。。數據