主题:急求高手指教 数据结构课程设计 多元关键字排序
tommytr
[专家分:0] 发布于 2006-06-28 03:26:00
多元关键字排序
假设待排序的记录数不超过100,表中记录的关键字数不超过5,各个关键字的范围均为0至100。按用户给定的进行排序的关键字的优先关系,输出排序结果
回复列表 (共2个回复)
沙发
liangbch [专家分:1270] 发布于 2006-06-28 13:18:00
/*
可调用C++库函数qsort(快速排序)来做,非常简单,只需要定义一个比较函数。
qsort的速度也非常快,不必担心效率问题。
下面给出代码的代码在VC6.0编译通过
*/
// programfan178281.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "memory.h"
#include "windows.h"
#include "stdlib.h"
#include "search.h"
typedef struct _st_MyType
{
int item1;
int item2;
int item3;
int item4;
int item5;
}MyType;
MyType data[100];
//定义两个记录的比较规则,为了简单起见,这段代码
//优先比较 item1,然后比较item2, 最后比较item3 ,如果item3相等,则认为这两个记录相同
//具体在实际的例子中,可以按照客户的要求定义新的比较规则
int CustForMyType(const void *e1,const void *e2)
{
const MyType *p1=(MyType *)e1;
const MyType *p2=(MyType *)e2;
if (p1->item1 < p2->item1)
return -1;
else if (p1->item1 > p2->item1)
return 1;
//两个元素的item1字段相同,比较第二个字段
if (p1->item2 < p2->item2)
return -1;
else if (p1->item2 > p2->item2)
return 1;
//两个元素的item2字段相同,比较第二个字段
if (p1->item3 < p2->item3)
return -1;
else if (p1->item3 > p2->item3)
return 1;
return 0; //两个元素相同,返回0
}
int main(int argc, char* argv[])
{
int i,n;
/*
此处请,补上输入n个记录到data 的代码
............
............
*/
//调用c++库函数的快速排序函数qsort进行排序
//许多c++编译器都包含qsort函数,包括VC
//在一些非常老的c++编译器,这段代码可能不能通过编译
qsort(data,n,sizeof(MyType),CustForMyType);
for (i=0;i<n;i++)
{
//此处请,补上输出排序好第i个记录 的代码
}
return 0;
}
板凳
tommytr [专家分:0] 发布于 2006-06-29 13:07:00
3Q 我去试试
我来回复