回 帖 发 新 帖 刷新版面

主题:急求高手指教   数据结构课程设计 多元关键字排序

多元关键字排序
假设待排序的记录数不超过100,表中记录的关键字数不超过5,各个关键字的范围均为0至100。按用户给定的进行排序的关键字的优先关系,输出排序结果

回复列表 (共2个回复)

沙发

/* 
可调用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;
}

板凳

3Q  我去试试

我来回复

您尚未登录,请登录后再回复。点此登录或注册