直接插入排序(straight insertion sort)的一趟操作是将当前无序区的开头
元素R[i] (1<=i<=n)插入到有序区R[0…i-1]中的适当位置,使R[0…i]变为新的有序区。
对于第i趟排序,如何将无序区的第一个元素R[i]插入到有序区呢?其过程是先将R[i]暂放到 tmp中.i在有序区中从后向前找(初值为i-1),凡是关键字大于tmp.key的记录均后移一个位置。若找到某个R[j],其关键字小于或等于tmp.key,则将tmp放在它们后面,即置R[j+1]=tmp。
说明:直接插入排序每趟产生的有序区并不一定是全局有序区,也就是说有序区中的元素并不一定放在最终的位置上。当一个元素在整个排序结束前就已经放在其最终位置上称为归位(homing)。
typedef char InfoType;
typedef int KeyType;
//结构体
typedef struct{
KeyType key;
InfoType data;
}RecType;
void InsertSort(RecType R[],int n){
int i,j,s=n;
RecType tmp;
for(i=1;i<n;i++){
if(R[i].key<R[i-1].key){
tmp=R[i];
j=i-1;
do{
R[j+1]=R[j];
j--;
}while(j>=0&&R[j].key>tmp.key);
R[j+1]=tmp;
}
}
}