C编程基于4个字符串对结构数组进行排序

C编程基于4个字符串对结构数组进行排序,c,arrays,string,sorting,struct,C,Arrays,String,Sorting,Struct,编辑: 我忘了提到它是以循环链表开始的! 我需要按照以下顺序对下面定义的联系人结构数组进行排序: 姓氏 名字 电子邮件 电话号码 我将如何以有效的方式进行这项工作 就大订单而言,哪种排序方法最合适 以下是我的结构定义: struct contact { char firstName[256], lastName[256], email[256], phoneNumber[256]; struct contact *pPrev; struct contact *pNext

编辑: 我忘了提到它是以循环链表开始的!
我需要按照以下顺序对下面定义的联系人结构数组进行排序:

姓氏
名字
电子邮件
电话号码

  • 我将如何以有效的方式进行这项工作
  • 就大订单而言,哪种排序方法最合适
  • 以下是我的结构定义:

    struct contact {
        char firstName[256], lastName[256], email[256], phoneNumber[256];
        struct contact *pPrev;
        struct contact *pNext;
    };
    

    看起来您的数据组织在一个列表中(由于pPrev和pNext)。qsort()不能用于列表

    对于列表,合并排序是一种方法:只要列表包含多个元素,将其拆分为两个列表,对每个列表进行排序,然后将两个已排序的列表合并为一个:因为两个列表都已排序,所以只需对头进行比较。比较两个列表的标题,删除较小的标题并将其附加到已排序的列表中


    复杂性是O(N*logn)

    使用qsort?有什么问题吗?只要使用你想要的任何排序算法,当你得到两个相同的记录时,改变标准;最坏的情况是,对于相同的两条记录,您将更改标准3次。我如何在4个字符串上排序,lastname优先于first,依此类推?顺序从左到右。我也不知道你在哪里见过256个字符长的电话号码。你的小结构不能容纳世界上四分之三的人的名字。“我怀疑你的设计。”乔治。我的问题是(我可能弄错了,只是想理解一下):我如何确定按什么顺序排序/根据什么排序?这个算法会不会让我在某些地方有一个已排序的列表,而在其他地方有一个未排序的列表?如中所示,如果它只是添加到末尾,那么它属于这两个元素之间的情况如何?它永远不可能属于这两个元素之间的某个位置,因为您要合并的两个列表已经排序,即,如果您从这两个列表中的一个移除节点,剩下的节点没有一个比删除的节点低。因此,您基本上找到了最小值/最大值,并说它已排序?是的。维基百科有更多的信息,包括一些排序列表的代码。