Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 按2个字段插入结构的排序数组_C_Sorting_Insertion Sort - Fatal编程技术网

C 按2个字段插入结构的排序数组

C 按2个字段插入结构的排序数组,c,sorting,insertion-sort,C,Sorting,Insertion Sort,我正在制作一款uno纸牌游戏,游戏结构为带字段的纸牌: struct card { int rank char *color char *action. } 我可以通过插入按颜色排序。我想知道如何先按颜色对uno卡数组进行排序,然后对每种颜色的秩进行排序。假设该结构称为card,c1和c2是指向该结构对象的两个指针 在这种情况下,您应该使用以下条件来比较数组的元素 int comparison( card *c1, card *c2 ) { int co

我正在制作一款uno纸牌游戏,游戏结构为带字段的纸牌:

struct card
{
    int rank 
    char *color  
    char *action. 
}

我可以通过插入按颜色排序。我想知道如何先按颜色对uno卡数组进行排序,然后对每种颜色的秩进行排序。

假设该结构称为card,c1和c2是指向该结构对象的两个指针

在这种情况下,您应该使用以下条件来比较数组的元素

int comparison( card *c1, card *c2 )
{
    int color_cmp = strcmp( c1->color, c2->color ); 
    return color_cmp < 0 || ( color_cmp == 0 && c1->rank < c2->rank );
}

假设由于Bo Persoson,您正在重载
操作符,这就是我问题的解决方案

void sort(card *a, int length) {
int j;
for (int i = 1; i < length; i++) {
    j = i;
    while (j > 0 && a[j].color < a[j - 1].color || (a[j].color == a[j - 1].color && a[j].rank < a[j - 1].rank)) {
        swap(&a[j], &a[j - 1]);
        j--;
    }
}
void排序(卡片*a,整数长度){
int j;
for(int i=1;i0&&a[j].color

}

您能分享到目前为止的代码吗?如果你有一个条件
color1
,你可以把它改成
color1
^这就是解决办法。谢谢你,波·佩索森,这就是答案。
int colorCompareResult = strcmp(card1.color, card2.color);
if (colorCompareResult < 0)
    return true;
else if (colorCompareResult == 0 && card1.rank < card2.rank)
    return true;
else
    return false;
void sort(card *a, int length) {
int j;
for (int i = 1; i < length; i++) {
    j = i;
    while (j > 0 && a[j].color < a[j - 1].color || (a[j].color == a[j - 1].color && a[j].rank < a[j - 1].rank)) {
        swap(&a[j], &a[j - 1]);
        j--;
    }
}