Que*_*est 3 c arrays sorting multidimensional-array
我有3个数组:A,B和C:
char A[6][10];
int B[6];
int C[6];
Run Code Online (Sandbox Code Playgroud)
我想要同时对上面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
Run Code Online (Sandbox Code Playgroud)
然后我想从最低到最高排序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
Run Code Online (Sandbox Code Playgroud)
那么如果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
Run Code Online (Sandbox Code Playgroud)
然后,如果来自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
Run Code Online (Sandbox Code Playgroud)
我写了一个代码来尝试这样做,但我有点挣扎导致1个数组将simulatanuosly排序到另一个数组. 任何人都可以指出我做错了什么或描述更好/最好的方式来做这种类型的排序?
#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]);
}
}
Run Code Online (Sandbox Code Playgroud)
输出代码:
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
Run Code Online (Sandbox Code Playgroud)
谢谢
所有其他答案都是正确的,指出你没有正确交换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);
}
Run Code Online (Sandbox Code Playgroud)