我想根据13
值按升序打印多个不同类型的数组。我有两个指针数组和一个浮点数组。我希望它们像第一行中带有a1,a2和a3的excel文档一样保持组合在一起。每列有三个数组。我展示的代码只是一个简单的例子。我目前在我的阵列中有大约20k的值。有没有办法避免典型的冒泡排序?这需要大量的malloc和strcpy操作。
numbers_column3
预期结果是
#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;
}
答案 0 :(得分:1)
如果三个数组的元素在语义上耦合,为什么不用fun
,struct
和tag
字段创建nationality
。这使得数据元素之间的连接变得明确,并允许使用标准库number
函数创建和排序此类结构的数组。这是一个示例程序:
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);
}
答案 1 :(得分:0)
我认为如果将column3的索引存储在另一个数组中,则可以按索引打印列。 例如 - 在第3列的排序期间,将索引存储如下,以便如此 新数组包含[2,0,1]