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])
您似乎混淆了 float
和 double
。
这显示了如何完成这项工作。它对 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");
}
有人知道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])
您似乎混淆了 float
和 double
。
这显示了如何完成这项工作。它对 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");
}