c - 在c中对正 float 进行排序

标签 c

我正在尝试以最有效的方式对正 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/

相关文章:

javascript - C 指针相当于 JavaScript 中的登录

c - 从系统调用刷新浏览器

c - Grand Central Dispatch 中的线程数和线程数

c - 对 bison 中规则的所有组件执行操作

c - 如何检查文本文件中的文本然后存储变量?

c - 从 C 代码调用 DynamoDB 低级 API 时出错

余弦泰勒逼近C语言

C、全局变量的改变不保留在函数之外

在将程序构建到 ubuntu 之前更改程序的名称

c - 进程使用 fork 运行 xterm 实例时出错