gpt4 book ai didi

c - 此值 中的 qsort(浮点二维数组)错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:18:22 25 4
gpt4 key购买 nike

我试着让 first value = first value/second value 并对其进行排序:

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

int cmp (const void * a, const void * b)
{return ( *(float*)a - *(float*)b );}

int main()
{
float Array[4][2]= {{10,10},
{5, 10},
{5, 5 },
{2, 5}};

int i,j;

for(j=0;j<4;j++) //first value = first value / second value
{
Array[j][0]=Array[j][0]/Array[j][1];
}


qsort(Array, 4, 2*sizeof(Array[0][0]), cmp);


for(j=0;j<4;j++) //JUST PRINTF
{
for(i=0;i<2;i++)
printf("%.1f ",Array[j][i]);
printf("\n");
}
}

before qsort -------- after qsort -----  my expect


1.0 10.0 ------------- 0.5 10.0 -------- 0.4 5.0

0.5 10.0 ------------- 1.0 5.0 -------- 0.5 10.0

1.0 5.0 ------------- 0.4 5.0 -------- 1.0 5.0

0.4 5.0 ------------- 1.0 10.0 -------- 1.0 10.0

qsort 输出很奇怪。你能告诉我我误解了什么吗?

最佳答案

您的比较功能不正确。它(隐含地)转换两个浮点值的差值通过将其截断为整数。因此两个 float 如果它们的差异是严格的,则值被认为是相等的小于 1.0

正确的比较函数应该是

int cmp (const void * a, const void * b)
{
float x = *(float*)a;
float y = *(float*)b;
return x < y ? -1 : x == y ? 0 : 1;
}

修改之后,你的程序的输出是

0.4 5.0 
0.5 10.0
1.0 10.0
1.0 5.0

因此数组相对于第一个“列”正确排序。

关于c - 此值 <stdlib.h> 中的 qsort(浮点二维数组)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34507520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com