首页 > 解决方案 > 在c中对正浮点数进行排序

问题描述

我正在尝试以最有效的方式对正浮点数进行排序。我有或多或少的 10k 个元素。

我考虑过基数排序(迄今为止最好的一种)或桶排序,有人有一些建议和原因。泰

标签: c

解决方案


您能否详细描述一下您在实现桶排序或基数排序时面临的困难?如果没问题(不是作业),您可以使用内置的 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


推荐阅读