-2
使用示例來自:how to sort 3 arrays together in C同時排序2陣列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
以下是我的代碼。有誰知道如何修復代碼,以便按照字母順序對arr1進行排序,如果arr2有重複的話。
#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
實際上重複;但是,如果您打算修復此代碼,請檢查'arr2 [j-1]> arr2 [j' - 添加它們相等時應發生的事情。 – usr2564301 2014-11-02 14:30:43
@ 2501我用這個例子來問這個問題 – user3035890 2014-11-02 14:47:00
@Jongware,Zaphod有一個函數,他用來排列數組在一起,這很好,所以我想知道是否有人可以添加到這個併爲此場景排序 - -----------我試着說arr2 [j-1] == arr2 [j]然後qsort(arr1,i,10,cmp)。這不起作用,但我應該使用qsort? – user3035890 2014-11-02 14:59:00