Qsort从小到大排序

Qsort sort from small to high

有人知道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();

这是Array,不关心结构。 我想用 cmpfunc1 排序的数组是双精度 (double 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");
}