设待排序的关键字序列为{12,2,16,30,28,10,16,20,6,18},试编写程序用直接插入对其进行排序。
令链表的第一个元素存放要插入的数据,在链表中依次查找,只要当前元素大于第一个元素就说明此位置就是
要插入得位置,然后插入就行了
#include <iostream>
using namespace std;
ypedef struct{
int key;
char otherinfo;
}Elemtype;
typedef struct SqNode{
Elemtype *data;
int length;
}SqList;
void InitList(SqList *S){ //初始化
S->data=new Elemtype[maxsize+1];
S->length=10;
S->data[1].key=12;
S->data[2].key=2;
S->data[3].key=16;
S->data[4].key=30;
S->data[5].key=28;
S->data[6].key=10;
S->data[7].key=16;
S->data[8].key=20;
S->data[9].key=6;
S->data[10].key=18;
}
void InsertSort(SqList *S){ //直接插入排序
int i,j;
for(i=1;i<S->length;i++)
if(S->data[i].key<S->data[i-1].key){
S->data[0].key=S->data[i].key;
S->data[i].key=S->data[i-1].key;
for(j=i-2;S->data[0].key<S->data[j].key;--j)
S->data[j+1].key=S->data[j].key;
S->data[j+1].key=S->data[0].key;
}
}
void PrintList(SqList *S)
{
int i;
for(i=1;i<=S->length;i++)
cout<<S->data[i].key<<" ";
cout<<endl;
}
int main()
{
SqList S;
InsertSort(&S);
PrintList(&S);
return 0;
}