c - 在c中对正浮点数进行排序
问题描述
我正在尝试以最有效的方式对正浮点数进行排序。我有或多或少的 10k 个元素。
我考虑过基数排序(迄今为止最好的一种)或桶排序,有人有一些建议和原因。泰
解决方案
您能否详细描述一下您在实现桶排序或基数排序时面临的困难?如果没问题(不是作业),您可以使用内置的 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 中使用以下命令(或谷歌“man qsort”)找到 qsort(或任何此类公共 libc 函数)的手册
man qsort
这是一个使用 qsort 对浮点数进行排序的示例程序。
#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
推荐阅读
- lua - Roblox Studio 价值问题
- cmake - 在cmake中获取可执行文件之间的依赖关系
- java - 您的 SQL 语法有错误 检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法使用
- oracle - SQL Developer 不提供 Oracle 10g 的输出
- javascript - 在 oidc-client 中调用 UserManager 类
- docker - pod 容器无法解析运行它的主机
- unit-testing - 谷歌测试:共享库的代码覆盖率
- javascript - jQuery 分页打开第二页它破坏了应用程序
- javascript - Angular 中的编辑器
- java - Android Retrofit 数组列表中的嵌套 JSON 对象