我有 3 个数组:A、B 和 C:
char A[6][10];
int B[6];
int C[6];
我希望同时对上述 3 个数组(具有相同的 n# 个元素)进行排序。如果我对数组 B 从最低值到最高值进行排序,那么我希望数组 A 和 C 遵循 B 的模式。这也许可以用下面的例子更好地解释。
我有下面的代码尝试这样做,我的问题是如何编辑/修复我的代码以执行下面描述的同步排序功能?
未排序列表:
A[6] B[6] C[6]
John 12 2
David 30 1
Michael 12 2
Steve 12 1
Sam 19 2
Claire 12 1
然后我想将 B[i] 从最低到最高排序,而 A[i] & C[i ] 根据B[i]
排序A[6] B[6] C[6]
John 12 2
Michael 12 2
Steve 12 1
Claire 12 1
Sam 19 2
David 30 1
然后如果B[i]中有相同/相同的数字,那么我想将C[i]从最低到最高排序> 导致 A[i] 和 B[i] 根据 C[i]:
排序A[6] B[6] C[6]
Steve 12 1
Claire 12 1
John 12 2
Michael 12 2
Sam 19 2
David 30 1
然后如果 A[i] 中的 2 个名字在 B[i] 和 C[i] 中有相似之处,则对 >A[i] 按字母顺序排列。
A[6] B[6] C[6]
Claire 12 1
Steve 12 1
John 12 2
Michael 12 2
Sam 19 2
David 30 1
我编写了一个代码来尝试执行此操作,但我在使 1 个数组同时排序到另一个数组方面遇到了一些困难。 任何人都可以指出我做错了什么或描述进行此类排序的更好/最佳方法吗?
#include <stdio.h>
main()
{
char A[6][10]={"John","David","Michael","Steve","Sam","Claire"};
int B[6] = {12,30,12,12,19,12};
int C[6] = {2,1,2,1,2,1};
int i=0;
int true=1;
for (i=0;i<6;i++)
{
printf("%s\t%d\t%d\n",A[i],B[i],C[i]);
}
while(1)
{
true = 0;
for (i=0;i<6;i++){
if(B[i]> B[i+1]){
int temp = B[i];
B[i] = B[i+1];
B[i+1] = temp;
C[i]= C[i+1];
swapped = 1;
}
}
if (true==0){
break;
}
}
printf("\nnew list\n");
for (i=0;i<6;i++)
{
printf("%s\t%d\t%d\n",A[i],B[i],C[i]);
}
}
代码输出:
John 12 2
David 30 1
Michael 12 2
Steve 12 1
Sam 19 2
Claire 12 1
new list
John 12 2
David 12 2
Michael 12 1
Steve 12 1
Sam 19 1
Claire 30 1
谢谢
最佳答案
所有其他答案都正确,指出您没有正确交换 A 和 C。但我会尝试回答“什么是最好的方法”这个问题。理想情况下,由于您的 A、B 和 C 数组都相互关联,因此您应该使用结构数组而不是 3 个单独的数组。我不知道您是否了解了结构,但这里有一个示例,说明我将如何使用结构重写您的代码:
#include <stdio.h>
#include <stdbool.h>
typedef struct Person {
char name[10];
int age;
int group;
} Person;
#define DIM(a) (sizeof(a)/sizeof(a[0]))
main()
{
Person people[] = {
{ "John", 12, 2 },
{ "David", 30, 1 },
{ "Michael", 12, 2 },
{ "Steve", 12, 1 },
{ "Sam", 19, 2 },
{ "Claire", 12, 1 }
};
int i=0;
int n=0;
for (i=0;i<DIM(people);i++)
printf("%s\t%d\t%d\n", people[i].name, people[i].age, people[i].group);
// Here I used a bubble sort since it seemed like what you were doing.
n = DIM(people)-1;
while (1) {
bool swapped = false;
for (i=0;i<n;i++) {
if (people[i].age > people[i+1].age) {
Person temp = people[i];
people[i] = people[i+1];
people[i+1] = temp;
swapped = true;
}
}
n--;
if (!swapped)
break;
}
printf("\nnew list\n");
for (i=0;i<DIM(people);i++)
printf("%s\t%d\t%d\n", people[i].name, people[i].age, people[i].group);
}
关于c - 如何在C中将3个数组排序在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26695133/