基本思想:
每趟将一条待排序的记录,按其关键字值得大小插入到前面已经排好序的记录序列中的适当位置,直到全部记录插入完成为止。
主要步骤:
1将r[i]暂存在临时变量temp中,2将temp与r[j](j=i-1,i-2....,0)比较,若temp<r[j],则将r[j]后移一个位置,3将temp插入到第j+1个位置上;
4令i=1,2,3....,n-1,重复上述步骤1~3
算法实现:
public void insertSort(){
RecordNode temp;
int i,j;
for(i=1;i<this.curlen;i++){
temp=r[i];
for(j=i-1;j>=0&&temp.getKey().compareTo(r[j].getKey())<0;j--){
r[j+1]=r[j];
}
r[j+1]=temp;
}
}//不带监视哨的直接插入排序
public void insertSortwithGuard(){
int i,j;
for(i=1;i<this.curlen;i++){
r[0]=r[i];
for(j=i-1;r[0].getKey().compareTo(r[j].getKey())<0;j--){
r[j+1]=r[j];
}
r[j+1]=r[0];
}
}//带监视哨的直接插入排序算法