gpt4 book ai didi

c - 按升序打印多个不同类型的数组

转载 作者:行者123 更新时间:2023-11-30 14:52:49 25 4
gpt4 key购买 nike

我想根据 numbers_column3 值按升序打印多个不同类型的数组。我有两个指针数组和一个 float 组。我希望它们像 Excel 文档一样分组在一起,第一行为 a1、a2 和 a3。我每列都有三个数组。我展示的代码只是一个简单的示例。目前我的数组中有大约 20k 个值。有没有办法避免典型的冒泡排序?这将需要大量的 malloc 和 strcpy 操作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(int argc, char **argv)
{
char *q6_tag_strings_line_column1[2000] = {0};
char *q6_nationality_strings_line_column2[2000] = {0};
float numbers_column3[2000] = {0};

q6_tag_strings_line_column1[0] =
malloc(strlen("echo")+1);

strcpy(q6_tag_strings_line_column1[0],
"echo");

q6_nationality_strings_line_column2[0] =
malloc(strlen("hi")+1);

strcpy(q6_nationality_strings_line_column2[0],
"hi");

numbers_column3[0] = 5;

q6_tag_strings_line_column1[1] =
malloc(strlen("how")+1);

strcpy(q6_tag_strings_line_column1[1],
"how");

q6_nationality_strings_line_column2[1] =
malloc(strlen("are")+1);

strcpy(q6_nationality_strings_line_column2[1],
"are");

numbers_column3[1] = 7;


q6_tag_strings_line_column1[2] =
malloc(strlen("you")+1);

strcpy(q6_tag_strings_line_column1[2],
"you");

q6_nationality_strings_line_column2[2] =
malloc(strlen("what")+1);

strcpy(q6_nationality_strings_line_column2[2],
"what");

numbers_column3[1] = 4;
return 0;
}

预期结果是

you what 4
echo hi 5
how are 7

最佳答案

如果三个数组的元素在语义上耦合,为什么不创建一个包含 tagnationalitynumber 的 struct 字段。这使得数据元素之间的连接变得明确,并允许使用标准库 qsort() 函数创建此类结构的数组并对其进行排序。这是一个示例程序:

#include <stdio.h>
#include <stdlib.h>

struct Data {
char *tag;
char *nationality;
float number;
};

int compare_Data(const void *a, const void *b);

int main(void)
{
struct Data my_data[] = {
{ .tag = "North America",
.nationality = "Canadian",
.number = 3.3 },
{ .tag = "South America",
.nationality = "Brazilian",
.number = 5.5 },
{ .tag = "Asia",
.nationality = "Japanese",
.number = 1.1 },
};

puts("Before sorting:");
for (size_t i = 0; i < sizeof my_data / sizeof *my_data; i++) {
printf("Number: %f\n"
"Nationality: %s\n"
"Tag: %s\n",
my_data[i].number,
my_data[i].nationality,
my_data[i].tag);
putchar('\n');
}

qsort(my_data,
sizeof my_data / sizeof *my_data,
sizeof *my_data,
compare_Data);

puts("After sorting:");
for (size_t i = 0; i < sizeof my_data / sizeof *my_data; i++) {
printf("Number: %f\n"
"Nationality: %s\n"
"Tag: %s\n",
my_data[i].number,
my_data[i].nationality,
my_data[i].tag);
putchar('\n');
}
return 0;
}

int compare_Data(const void *a, const void *b)
{
const struct Data *da = (const struct Data *) a;
const struct Data *db = (const struct Data *) b;

return (da->number > db->number) - (da->number < db->number);
}

程序输出:

Before sorting:
Number: 3.300000
Nationality: Canadian
Tag: North America

Number: 5.500000
Nationality: Brazilian
Tag: South America

Number: 1.100000
Nationality: Japanese
Tag: Asia

After sorting:
Number: 1.100000
Nationality: Japanese
Tag: Asia

Number: 3.300000
Nationality: Canadian
Tag: North America

Number: 5.500000
Nationality: Brazilian
Tag: South America

关于c - 按升序打印多个不同类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com