【正确答案】(1)数据结构
typedef int KeyType;
typedef int DataType;
typedef struct{
KeyType key; /*排序码字段*/
DataType info; /*记录的其他字段*/
}RecordNode;
typedef struct{
int n; /*n为文件中的记录个数*/
RecordNode *record;
}SortObject;
(2)思路
这里不需要整体排序,故选择一种能较快得出最终排序段的前一部分的算法改造即可,如直接选择排序、冒泡排序、堆排序算法都能最先得出前5个最大元素。综合考虑算法的时间代价,采用直接选择排序算法并加以改造即可。
(3)算法
函数返回一个教组,数组中存着挑出的元素,为动态分配的。
RecordNode*Outmax(SortObject*pvector,int out){
int i,j,k;
RecordNode*outpart;
RecordNode temp;
if(out>pvector->n){
printf("the given value is wrong!");
return NULL;
}
outpart=(RecordNode*)malloc(out*sizeof(RecordNode));
if(outpart==NULL){
printf("No space!\n");
return NULL;
}
for(i=0;i<out;i++){
k=i:
for(j=i+1;j<pvector->n;j++)
if(pvector->record[j].key>pvector->record[k].key)k=j;
if(k!=i){
temp=pvector->record[i];
pvector->record[i]==pvector->record[k];
pvector->record[k]=temp;
}
outpart[i]=pvector->record[i];
}
return outpart;
}
(4)代价分析
O(n×m)(设从n个元素中选出m个最大元素)。
【答案解析】