我正在尝试以最有效的方式对正 float 进行排序。我或多或少有 10k 个元素。
我考虑过基数排序(迄今为止最好的一个)或桶排序,有人有一些建议以及原因。 ty
最佳答案
您能否详细描述一下您在实现桶排序或基数排序时遇到的困难?如果没问题(不是家庭作业),您可以使用内置的 qsort (如 @Barmar 建议)。这是该方法的声明。
/* from man pages */
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
void qsort_r(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *, void *),
void *arg);
您可以在 Linux 中使用以下命令(或 google“man qsort”)找到 qsort(或任何此类公共(public) libc 函数)的手册
man qsort
这是一个使用 qsort 对 float 进行排序的示例程序。
#include <stdio.h>
#include <stdlib.h>
/* this function will be used by qsort to compare elements */
int cmp(const void *v1, const void *v2) {
float f1=*((float*)v1);
float f2=*((float*)v2);
if(f1 < f2)
return -1;
else if(f1 > f2)
return 1;
return 0;
}
int main() {
int i;
float x[] = {0.2, 0.3, 0.1};
qsort(x, 3, sizeof(float), cmp);
for(i=0; i<3; i++)
printf("%f\n", x[i]);
}
您可以在此处阅读有关快速排序的信息。 https://en.wikipedia.org/wiki/Quicksort
在此处了解有关函数指针的更多信息 https://en.wikipedia.org/wiki/Function_pointer
关于c - 在c中对正 float 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180264/