微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在两个行列式下对单链表进行排序?

如何解决如何在两个行列式下对单链表进行排序?

好的,所以我得到了一些产品的列表,它们有两个属性 x 和 y。我需要按 x 升序对它们进行排序,如果将有两个具有相同 x 的产品,那么我必须对具有相同 x 的产品按 y 降序进行排序。请注意,元素已经在列表中,我需要重复排序。

现在我有这样的事情:

void Sort_my_list(Product * &list,int x)  
{
  Product* sorted = 0; 
  while (list != 0) 
  {
    Product* max = list,* before_max = 0; 
    for (Product* p = list,*i = list->next_;                               
      i != 0; 
      p = i,i = i->next_) 
    {
      if (i->get_x(x) > max->get_x(x))
      {
        max = i; 
        before_max = p; 
      }
    }
    if (before_max != 0) 
      before_max->next_ = max->next_; 
    else 
      list = max->next_; 
    max->next_ = sorted; 
    sorted = max; 
  }
  list = sorted; 
}

解决方法

列表排序代码与节点比较代码分离。前者可以调用后者,但不关心它的内部。

比较问题要简单得多:给定两个产品,aba 应该在列表中排在 b 之前吗?

一旦比较函数开始工作,排序函数就可以调用它,并使用您喜欢的任何排序算法(例如冒泡排序、合并排序、插入排序...)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。