A-A+

已知顺序表中有m个记录 表中记录不依关键字有序排列 编写算法为该顺序表建立一个有序的索引表

2022-08-12 15:53:07 问答库 阅读 196 次

问题详情

已知顺序表中有m个记录,表中记录不依关键字有序排列,编写算法为该顺序表建立一个有序的索引表,索引表中的每一项含记录的关键字和该记录在顺序表中的序号,要求算法的时间复杂度在最好的情况下能达到D(m)。


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:#define m顺序表中记录个数typedef struct node{keytype key;//关键字int adr;//该关键字在顺序表中的下标}idxnode;//索引表的一项typedef struct node{keytype key;//关键字anytype other;//记录中的其他数据}datatypevoid IndexT(idxnode index[m+1]datatyp seq[m+1])//给有个m记录的顺序表seq建立索引表index{index[1].key=seq[1].key;index[1].adr=1;for(i=2i<=mi++){j=i一1;index[0].key=seq[i].key;//监视哨while(index[J].key<index[0].key){index[j+1]=index[j];j一一;}index[j+1].key=index[0].key;//关键字放入正确位置index[j+1].adr=i;//第i个记录的下标}
#definem顺序表中记录个数typedefstructnode{keytypekey;//关键字intadr;//该关键字在顺序表中的下标}idxnode;//索引表的一项typedefstructnode{keytypekey;//关键字anytypeother;//记录中的其他数据}datatypevoidIndexT(idxnodeindex[m+1],datatypseq[m+1])//给有个m记录的顺序表seq建立索引表index{index[1].key=seq[1].key;index[1].adr=1;for(i=2,i<=m,i++){j=i一1;index[0].key=seq[i].key;//监视哨while(index[J].key<index[0].key){index[j+1]=index[j];j一一;}index[j+1].key=index[0].key;//关键字放入正确位置index[j+1].adr=i;//第i个记录的下标}

考点:顺序,算法