我的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
我做了第一个泡泡分类标准,但第二个标准更复杂。
我该怎么做?
答案 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数组元素的指针。