c - Qsort从小到高排序



有人知道如何写qsort的比较函数吗?我希望comparefunction1从最高到最低排序数组和comparefunction2从最低到最高排序另一个数组。我的代码:

int cmpfunc(const void *a, const void *b) {                                                                                             
if (*(double*) a < *(double*) b)
return 1;
else if (*(double*) a > *(double*) b)
return -1;
else
return 0;
}
int cmpfunc2(const void *a, const void *b) {
if (*(float*) a < *(float*) b)
return -1;
else if (*(float*) a > *(float*) b)
return 1;
else
return 0;
}

都比较函数从高到低排序。我想要一个从最低到最高的排序。qsort看起来像这样:

#include "stdio.h"
int main(){
qsort(Acal, 4, sizeof(float), cmpfunc);
qsort(Value, 4, sizeof(float), cmpfunc2);
}
有人看到一个错误,或者知道如何编写cmpfunctions吗?我只想让Value数组从低到高排序。真正的代码,很难理解(我是c的新手)main.h:
typedef struct{
float Value[5] ;
double Acal[5];
} value;
int cmpfunc();
int cmpfun2();

这是数组,不用关心结构体。我想用cmpfunc1排序的数组是一个双精度(双精度Acal[5])

看来你把floatdouble搞混了。

这显示了如何做这项工作。它对double数组和float数组进行一次自顶向下排序,一次自底向上排序。

这是不言自明的:

#include <stdio.h>
#include <stdlib.h>
// compare functions for top down sorting
int cmpfuncDoubleTopDown(const void* a, const void* b) {
if (*(double*)a < *(double*)b)
return 1;
else if (*(double*)a > *(double*)b)
return -1;
else
return 0;
}
int cmpfuncFloatTopDown(const void* a, const void* b) {
if (*(float*)a < *(float*)b)
return 1;
else if (*(float*)a > *(float*)b)
return -1;
else
return 0;
}

// compare functions for top bottom up sorting
int cmpfuncDoubleBottomUp(const void* a, const void* b) {
if (*(double*)a > *(double*)b)
return 1;
else if (*(double*)a < *(double*)b)
return -1;
else
return 0;
}
int cmpfuncFloatBottomUp(const void* a, const void* b) {
if (*(float*)a > *(float*)b)
return 1;
else if (*(float*)a < *(float*)b)
return -1;
else
return 0;
}

int main() {
double dvalues[] = { 3.0, 1.0, 4.0, 2.0 };
float fvalues[] = { 3.0f, 1.0f, 4.0f, 2.0f };
// sort top down
qsort(dvalues, 4, sizeof(double), cmpfuncDoubleTopDown);
qsort(fvalues, 4, sizeof(float), cmpfuncFloatTopDown);
for (int i = 0; i < 4; i++)
printf("%f ", fvalues[i]);
printf("n");
for (int i = 0; i < 4; i++)
printf("%f ", dvalues[i]);
printf("n");
// sort bottum up
qsort(dvalues, 4, sizeof(double), cmpfuncDoubleBottomUp);
qsort(fvalues, 4, sizeof(float), cmpfuncFloatBottomUp);
for (int i = 0; i < 4; i++)
printf("%f ", fvalues[i]);
printf("n");
for (int i = 0; i < 4; i++)
printf("%f ", dvalues[i]);
printf("n");
}

最新更新