由2个字段组成的插入排序数组

时间:2015-08-17 07:07:19

标签: c sorting insertion-sort

我正在制作一张带有卡片结构的uno牌游戏:

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

我可以通过插入按颜色排序。我想知道我怎么能先按颜色对uno卡数组进行排序,然后对每种颜色的等级进行排序。

3 个答案:

答案 0 :(得分:0)

假设结构被称为卡,c1和c2是结构对象的两个指针。

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

<?php
$con=mysqli_connect("mysql_host","mysql_user","mysql_password","mysql_database");


$result=mysqli_query($con, "SELECT * FROM my_table ORDER BY RAND() LIMIT 6");

$count = 0;
while($row=mysqli_fetch_row($result)){
    $postsarray["one.$count."] = $row[1];
    $postsarray["two.$count."] = $row[2];
    $count++;
}

$encodedArray = array_map(utf8_encode, $postsarray);
echo json_encode($encodedArray);


mysqli_close($con);

?>

此谓词被视为布尔谓词。如果你需要一个比较函数,它将在标准算法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 ); } 中使用,那么你必须改变它,使它返回-1,0或1。

例如

qsort

答案 1 :(得分:0)

假设您正在超载operator <,您应该实施一个条件来比较卡片的颜色及其等级。由于您希望主要排序标准是颜色,因此您应首先检查该标准。我会实现这样的事情:

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;

答案 2 :(得分:0)

感谢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--;
    }
}

}