使用以下示例:how to sort 3 arrays together in C
我有2个数组,我想要一起排序,例如1是字符A-Z,另一个是ID号:1,2,3 ......
char arr1 [3] [10] = {C,B,A}; int arr2 [3] = {2,1,2};
我在下面的代码从最低到最高的数字排序第二个数组,并相应地对第一个数组进行排序。
无序的数组:
Charlie 2
Bravo 1
Aplha 2
Bravo 1
Charlie 2
Aplha 2
我的问题是,如果arr2中有重复项,我如何按字母顺序对arr1进行排序。您可以在下面看到Alpha和Charlie翻转,因为它们在arr2中有重复值,这就是我想要输出的样子。
Bravo 1
Aplha 2
Charlie 2
以下是我的代码。有没有人知道如何修复代码,以便在arr2有重复的情况下按字母顺序对arr1进行排序。
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return strcmp(a, b);
}
void sort(long sz, char arr1[][5], int arr2[])
{
long i;
long j;
char arr1temp[5];
int arr2temp;
for(i=1; i<sz; ++i) {
j=i;
while(j>0 && arr2[j-1] > arr2[j]) {
arr2temp = arr2[j-1];
arr2[j-1] = arr2[j];
arr2[j] = arr2temp;
strcpy(arr1temp, arr1[j-1]);
strcpy(arr1[j-1], arr1[j]);
strcpy(arr1[j], arr1temp);
j = j-1;
}
}
}
int main()
{
int i,j,count;
char arr1[3][5] = {"C", "B", "A"};
int arr2[3] = {2,1,2};
printf("ordered list\n");
for (i=0;i<3;i++)
printf("%s\t%d\n",arr1[i],arr2[i]);
printf("unordered list\n");
sort(3, arr1, arr2);
for (i=0;i<3;i++)
printf("%s\t%d\n",arr1[i],arr2[i]);
}
输出:
unordered list
C 2
B 1
A 2
ordered list
B 1
C 2
A 2
答案 0 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int int_compare(const void *elem1, const void *elem2)
{
return (*(int *)elem1) - (*(int *)elem2);
}
int string_compare(const void *elem1, const void *elem2)
{
return strcmp(((char*)elem1), ((char *)elem2));
}
int main(int argc, char **argv)
{
char arr1[3][5] = {"C", "B", "A"};
int arr2[9] = {2, 1, 2, 3, 5, 1, 0, 34, 5};
qsort(arr2, (sizeof(arr2)/sizeof(arr2[0])), sizeof(arr2[0]), &int_compare);
qsort(arr1, (sizeof(arr1)/sizeof(arr1[0])), sizeof(arr1[0]), &string_compare);
for (int i = 0; i < (sizeof(arr2)/ sizeof(arr2[0])); i++) {
printf("%i\n", arr2[i]);
}
printf("\n");
for (int i = 0; i < (sizeof(arr1)/ sizeof(arr1[0])); i++) {
printf("%s\n", arr1[i]);
}
return 0;
}