当我尝试将其更改为反向字母顺序时,排序功能会中断吗?

时间:2019-04-25 09:57:00

标签: c

所以我有这个函数,该函数当前对插入的数组结构进行排序,并按字母顺序对其进行排序,如下所示:

void string_rearrangement(Employee payroll[], int size)
{
    //declaring temporary struct
    Employee temp;
    int i = 0, j = 0;

    for (i = 0; i <= size; i++)
    {
        for (j = i + 1; j <= size; j++)
        {
            if (strcmp(payroll[i].name, payroll[j].name) >0)
            {
                temp = payroll[i];
                payroll[i] = payroll[j];
                payroll[j] = temp;
            }
        }
    }

}

有效。我已经测试过了这是我打印名称时得到的输出的屏幕截图:https://i.imgur.com/YhUzUa0.png

但是现在我想更改它,这样它就给我相反的字母顺序。我认为这只是将strcmp条件更改为<0,如图所示:

            if (strcmp(payroll[i].name, payroll[j].name) <0)

但是当我这样做时,我会得到一些疯狂的输出,例如:https://i.imgur.com/JdI0v8b.png

我在代码之间进行的唯一更改是> 0,所以我不确定为什么会这样。

1 个答案:

答案 0 :(得分:2)

row_number

您几乎可以肯定在这里使用select p.p_number, p.name, t.t_num, t.timestamp from payers p left join (select p_number, t_num, timestamp, row_number() over (partition by p_number order by timestamp desc) rn from trans t where t.timestamp <= date '2017-07-31') t on p.p_number = t.p_number and rn = 1 where p.p_number between 44545558 and 44545562 而不是for (i = 0; i <= size; i++) { for (j = i + 1; j <= size; j++) 。您正在越过数组界限进入不确定的行为。在更改排序顺序之前,您只是非常幸运地发现自己的代码可以正常工作。