为什么我的Quicksort算法列表中有一个0浮点,以及如何在我的Quicksort算法中包含NaN?

pol*_*llo 1 c++ algorithm nan quicksort

以下是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <limits>

#define INFINITY std::numeric_limits<float>::infinity()
#define NEGINFINITY -std::numeric_limits<float>::infinity()

int floatcomp(const void* elem1, const void* elem2)
{
    if (*(const float*)elem1 < *(const float*)elem2)
        return -1;
    return *(const float*)elem1 > *(const float*)elem2;
}

int main()
{
    float array[10] = {INFINITY, 3.5f, 144.4f, NAN, 12.4f, NEGINFINITY, 1.4f, -0.0f, 5.9f};
    int i;

    for (i = 0; i < 10; i++)
        printf("%f\n", array[i]);
    printf("\n");

    qsort(array, 10, sizeof(float), floatcomp);

    for (i = 0; i < 10; i++)
        printf("%f\n", array[i]);

    return 0;
}       
Run Code Online (Sandbox Code Playgroud)

快速排序算法按正确的顺序对输入的数字进行排序,但是列表中始终存在0.00000.

同时在向阵列添加NaN时,NaN没有正确排序,我无法正确地将NaN的两个不同的尾数添加到我的代码中作为顶部的字符串.

Mik*_*kis 7

要回答为什么总是包含零,那是因为你声明了一个包含10个元素的数组,但是只用9初始化它,所以第10个为零.

至于NaN,你应该准确地解释你对NaN"正确"排序的定义是什么,以及结果与你的预期有何不同.

  • 第10个值不是垃圾,它保证为"0".如果您的数组具有较小的初始化列表,则所有其他值都将初始化为"0". (2认同)