顺序表:
void InsertSort(int A[],int n){
int i,j;
for(i=2;i<=n;i++)
if(A[i]<A[i-1]){ //当前比前一位小,调整
A[0]=A[i];
for(j=i-1;A[j]>A[0];j--) //一直到不比前一位小
A[j+1]=A[j];
A[j+1]=A[0];
}
}
单链表:
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*Linklist;
void InsertSort(Linklist &L){
if(!(L->next)||!(L->next->next)) //不满足2个元素无法排序
return;
LNode *s=L->next->next; //s指向插入元素(从2号开始)
while(s){
LNode *pre=L; //pre指向表头
LNode *p=L->next; //p指向首元
LNode *temp=s->next; //temp指向下一个插入元素
while(s->data>p->data){ //p指向第一个>=s的位置
pre=p;
p=p->next;
}
pre->next=s; //s当前元素插入到pre和p之间
s->next=p;
s=temp; //s指向下一个插入元素
}
}