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:采用双向链表插入。。。。。。数据