结构的选择排序

Posted

技术标签:

【中文标题】结构的选择排序【英文标题】:Selection Sort for struct 【发布时间】:2015-12-02 19:18:23 【问题描述】:

我对使用结构数组的选择排序的逻辑有疑问。例如说这是我的结构:

struct data 
    int month
    int day
    ..
    .. 

现在我想做的是对月份和日期进行排序。我相信我知道如何在几个月内做到这一点,但我很难理解如何在几天内实现这一点。这是我迄今为止几个月的代码:

void sortData(struct Data yearData[], int sz)
    int i, j, m;
    int temp;

    for (i = 0; i < sz; i++) 
        m = i;
        for (j = i + 1; j < sz; j++)
            if (yearData[j].month < yearData[m].month) 
                m = j;
             

        if (m != i) 
            temp = yearData[i].month;
            yearData[i].month = yearData[m].month;
            yearData[m].month = temp;
        
    

我想我想检查月份是否相同,然后查看日期并对它们进行排序。我只是不知道在这种排序中添加另一个迭代是否正确。谢谢!

【问题讨论】:

仅供参考:C != C++ 并且您通常应该只标记您正在编写/编译的语言(答案可能会有很大差异)。 您不使用 std::sort 的任何特殊原因? 【参考方案1】:

试试这个:

...
if((yearData[j].month < yearData[m].month) || 
   ((yearData[j].month == yearData[m].month) && 
    (yearData[j].day < yearData[m].day))) 
    m = j;

...

但是,我不确定我是否理解您的交换。您应该交换整个结构,而不是一一交换其成员。考虑一下:

if (m != i) 
  struct Data tmp = yearData[i];
  yearData[i] = yearData[m];
  yearData[m] = tmp;

【讨论】:

ahhhh 这看起来像我想要它做的。我不交换整个结构的原因是因为其中的成员不仅仅是月份和日期。 这是结构的完整形式: 结构数据 int day;国际月份;整数年;浮得很高;浮低;浮法沉淀;字符条件; ; 我了解,但您想根据元素的月/日对元素进行排序。如果你只移动日期,你实际上是在破坏数据。我敢肯定这不是你想要的。 ahhhh,所以如果您只使用 yearData[ ] 进行交换比较,它将在几个月和几天内执行正确的排序,而不仅仅是几个月?我不知道为什么当它看起来如此简单时,我却在努力理解这一点【参考方案2】:

创建一个比较函数,然后使用它的结果。如果结构相等,比较函数应该返回 0,如果左边应该先行,则返回 -1,如果右边应该先行,则返回 +1。

它看起来像:

int yearDataCmp(struct Data left, struct Data right) 
    if ( left.month < right.month )  return -1; 
    if ( left.month > right.month )  return  1; 
    if ( left.day   < right.day   )  return -1; 
    if ( left.day   > right.day   )  return  1; 
    return 0;

【讨论】:

我不相信我可以为此创建另一个函数。它必须在 void sortData(struct Data yearData[], int sz) 函数中.. 很公平。只需将逻辑嵌入到您的主要功能中。创建一个默认为0cmp 变量,然后使用yearDataCmp 函数中的if 语句。无需返回值,只需相应地执行cmp = -1cmp = 1

以上是关于结构的选择排序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构:排序|| 选择排序

Go 数据结构和算法篇:选择排序

Go 数据结构和算法篇:选择排序

数据结构常用排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)

数据结构学习笔记——选择排序(简单选择排序和堆排序)

数据结构与算法选择排序的实现