编辑:这一切都是在C中完成的。
假设我有以下两个数组:
int numFields[] = {5, 1, 3, 2, 7}
char charFields[] = {'a' , 'b', 'c', 'd', 'e'}
我想以数字方式对numFields进行排序,并使charFields采用匹配numFields的新顺序,以便:
int numFields[] = {1, 2, 3, 5, 7}
char charFields[] = {'b', 'd', 'c', 'a', 'e'}
我知道可以使用qsort以数字方式对numFields进行排序,但是可以对charFields进行排序以匹配numFields的索引更改吗?有内置功能还是我必须自己实现?
由于
答案 0 :(得分:3)
qsort
允许您指定自己的比较函数,以指定数组应排序的条件。它允许您对任何类型的数组进行排序(可以是int
,可以是struct
),只要您知道要排序的对象的大小即可。您最好的选择是创建struct pair { int numValue; char charValue }
来表示该对。你可以
numFields
和charFields
并返回pair
数组。qsort
pair
的数组转换回charFields
。答案 1 :(得分:0)
简单地声明一个struct数组,每个元素都包含数字以及与之对应的字母。然后根据数字
对数组进行排序或使用具有特定回叫功能的qsort
来执行您需要的操作。
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int numFields[] = {5, 1, 3, 2, 7};
char charFields[] = {'a' , 'b', 'c', 'd', 'e'};
// temporary arrays for sorted result
int numFields2[5];
int charFields2[5];
// an index for sorting
int idx[] = {0, 1, 2, 3, 4};
// A cmompare function compares the numFields using the index values
int compar(const void* a,const void* b){
return numFields[*(int*)a]-numFields[*(int*)b];
}
int main(void) {
// sort the index values using the comapare function
qsort(idx, 5, sizeof(int), compar);
// use the sorted index to copy the values in the new sort order
int i;
for(i=0;i<5;i++){
numFields2[i] = numFields[idx[i]];
charFields2[i] = charFields[idx[i]];
}
// Copy result to original arrays
for(i=0;i<5;i++){
numFields[i] = numFields2[i];
charFields[i] = charFields2[i];
}
return 0;
}
答案 3 :(得分:-1)
在这里我尝试开发冒泡排序程序尝试使用它。,
int temp;
char a;
for(i=0;i<no;i++)
{
for(j=i;j<no;j++)
{
if(numFields[i] > numFields[j])
{
temp=numFields[i];
numFields[i]=numFields[j];
numFields[j]=temp;
a=charFields[i];
charFields[i]=charFields[j];
charFields[j]=a;
}
}
}