我正在制作一张带有卡片结构的uno牌游戏:
struct card
{
int rank
char *color
char *action.
}
我可以通过插入按颜色排序。我想知道我怎么能先按颜色对uno卡数组进行排序,然后对每种颜色的等级进行排序。
答案 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--;
}
}
}