C 一个数组相对于另一个数组的qsort()

C 一个数组相对于另一个数组的qsort(),c,arrays,sorting,qsort,C,Arrays,Sorting,Qsort,我想使用qsort()对数组a相对于b进行排序。你能给我功能吗 a={0,1,2,3,4} b={3,4,5,1,2} 答案必须是{3,4,0,1,2} 请给我函数的代码 比如: 整数比较(常数无效*a,常数无效*b) { 返回(*(字符*)a-*(字符*)b); }这是不可能的,因为qsort()接受一个数组,并将数组中的元素相互比较。您需要创建一个包含两个值的结构数组,如下所示: #include <stdlib.h> #include <stdio.h> type

我想使用qsort()对数组a相对于b进行排序。你能给我功能吗

a={0,1,2,3,4} b={3,4,5,1,2}

答案必须是{3,4,0,1,2}

请给我函数的代码

比如:

整数比较(常数无效*a,常数无效*b)
{
返回(*(字符*)a-*(字符*)b);

}

这是不可能的,因为qsort()接受一个数组,并将数组中的元素相互比较。您需要创建一个包含两个值的结构数组,如下所示:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
    int a;
    int b;
} c_type;

int
compare(const void *a, 
        const void *b) {
    return ((c_type *)a)->b - ((c_type *)b)->b;
}

int
main(int argc,
     char *argv[])
{
    int i = 0;
    c_type array[] = {{0, 3}, {1, 4}, {2, 5}, {3, 1}, {4, 2}};

    qsort(array, sizeof array / sizeof(*array), sizeof(*array), compare);

    for ( i = 0; i < sizeof array / sizeof(*array); i++ ) {
       printf("%d\t", array[i].a);
    }
    printf("\n");

    return 0;
}
#包括
#包括
类型定义结构{
INTA;
int b;
}c_型;
int
比较(const void*a,
常数void*b){
返回((c_类型*)a)->b-((c_类型*)b)->b;
}
int
主(内部argc,
字符*argv[]
{
int i=0;
c_型数组[]={{0,3},{1,4},{2,5},{3,1},{4,2};
qsort(数组,sizeof数组/sizeof(*数组),sizeof(*数组),比较);
对于(i=0;i
这是不可能的,因为qsort()接受一个数组,并将数组中的元素相互比较。您需要创建一个包含两个值的结构数组,如下所示:

#include <stdlib.h>
#include <stdio.h>

typedef struct {
    int a;
    int b;
} c_type;

int
compare(const void *a, 
        const void *b) {
    return ((c_type *)a)->b - ((c_type *)b)->b;
}

int
main(int argc,
     char *argv[])
{
    int i = 0;
    c_type array[] = {{0, 3}, {1, 4}, {2, 5}, {3, 1}, {4, 2}};

    qsort(array, sizeof array / sizeof(*array), sizeof(*array), compare);

    for ( i = 0; i < sizeof array / sizeof(*array); i++ ) {
       printf("%d\t", array[i].a);
    }
    printf("\n");

    return 0;
}
#包括
#包括
类型定义结构{
INTA;
int b;
}c_型;
int
比较(const void*a,
常数void*b){
返回((c_类型*)a)->b-((c_类型*)b)->b;
}
int
主(内部argc,
字符*argv[]
{
int i=0;
c_型数组[]={{0,3},{1,4},{2,5},{3,1},{4,2};
qsort(数组,sizeof数组/sizeof(*数组),sizeof(*数组),比较);
对于(i=0;i
您需要一种机制来通知compare函数要比较什么,而不是与传递给它的地址中存储的值进行比较的普通实现。这可以通过
静态
(全局)存储来实现:

#包括
int*Array=NULL;
void SetArray(int*const数组)
{
数组=数组;
}
int basecompare(常量无效*a,常量无效*b)
{
返回数组[*((int*)a)]-数组[*((int*)b)];
}
int main(int argc,char*argv[])
{
inta[]={0,1,2,3,4};
intb[]={3,4,5,1,2};
size_t len=sizeof(a)/sizeof(a[0]);
SetArray(b);
qsort(a、len、sizeof(int)、basecompare);
返回0;
}

您需要一种机制来通知compare函数要比较什么,而不是与传递给它的地址中存储的值进行比较的普通实现。这可以通过
静态
(全局)存储来实现:

#包括
int*Array=NULL;
void SetArray(int*const数组)
{
数组=数组;
}
int basecompare(常量无效*a,常量无效*b)
{
返回数组[*((int*)a)]-数组[*((int*)b)];
}
int main(int argc,char*argv[])
{
inta[]={0,1,2,3,4};
intb[]={3,4,5,1,2};
size_t len=sizeof(a)/sizeof(a[0]);
SetArray(b);
qsort(a、len、sizeof(int)、basecompare);
返回0;
}

您要用哪种语言查找代码?或者您只是在寻找快速排序算法?结果是如何精确计算的?你能告诉我们结果数组是如何从两个输入中构造出来的吗?@RavindraGullapalli我在寻找c语言中的syntex。你在寻找哪种语言的代码?或者您只是在寻找快速排序算法?结果是如何精确计算的?你能告诉我们结果数组是如何从两个输入构建的吗?@RavindraGullapalli我在寻找c中的syntex。