我如何根据相同的元素对结构进行排序?

时间:2016-05-09 14:03:25

标签: c sorting struct

我的struct有3个int数组。像这样:

A[]:  1   2   3   4   5    6    7    8   9   10  11  12  13  14  15
B[]:  2   3   1   1   2    2    4    3   3   1   3   4   3   4   1
C[]:  40  20  50  70  130  100  170  70  60  20  20  20  20  20  70

我想根据两个标准对结构进行排序。

首先是:增加C-Array

第二个是:为C-Array的每个相等元素增加B-Array。

排序后,数组必须采用这种方式:

A[]:  10  2   11  13  12  14  1   3   9   4   15  8   6    5    7  
B[]:  1   3   3   3   4   4   2   1   3   1   1   3   2    2    4    
C[]:  20  20  20  20  20  20  40  50  60  70  70  70  100  130  170

我做了第一个泡泡分类标准,但第二个标准更复杂。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

确定排序中元素顺序的关键因素是比较结果,在您的示例中,比较首先基于比较数组B中的两个元素,并且仅当它们在数组B中相等时才进行比较在数组A中。您可以创建这样的比较函数:

// A and B are two arrays, i and j are the two indexes for comparing
int compare(int i, int j) {
    if (C[i] < C[j]) return -1;
    else if (C[i] > C[j]) return 1;
    else { // compare in B
        if (B[i] < B[j]) return -1;
        else if (B[i] > B[j]) return 1;
        else return 0;
    }
}

然后你可以将这个比较函数应用到你的排序函数中,方法是替换比较元素的位置,例如:如果你有if (C[i] < C[j]) swap(...);代码那么做if (compare(i, j) < 0) swap(...);

如果使用标准C的qsort函数,则需要调整函数以接受指向struct数组元素的指针。