C中的冒泡排序浮点数

时间:2013-11-20 11:53:11

标签: c floating-point bubble-sort

我使用冒泡排序到1.00 20.00 3.30 4.50 5.20 6.10 7.80 8.10 9.14 0.67,我最终用

0.00 1.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00 20.00

这是我的代码

main()
{
int i,n = 10,j,value=0;
float median=0;
float a[10] = {1,20,3.3,4.5,5.2,6.1,7.8,8.1,9.14,0.67};
for(i= 0; i< 10; i++) {
    printf("%.2f  ", a[i]);
}
printf("\n\n");
for(i=0;i<n-1;i++)
{
    for(j=0;j<n-i-1;j++)
    {
        if(a[j]>a[j+1])
        {
            value=a[j+1];
            a[j+1]=a[j];
            a[j]=value;
        }
    }
}
for(i= 0; i< 10; i++) {
    printf("%.2f  ", a[i]);
}
}

任何人都可以告诉我我做错了什么以及为什么我在完成排序后丢失小数点后的所有数字。

P.S。我使用的是在线编译器http://www.compileonline.com/compile_c_online.php

4 个答案:

答案 0 :(得分:3)

valueint而不是float

int i,n = 10,j,value=0;

你在循环中得到截断值:

 value=a[j+1];
 a[j+1]=a[j];
 a[j]=value;

将其设为float value=0.0f;

答案 1 :(得分:1)

问题出在这里:

int value=0;

更改为:

float value=0.0f;

答案 2 :(得分:1)

您已将value声明为int

答案 3 :(得分:1)

  

任何人都可以告诉我我做错了什么以及为什么我在完成排序后丢失小数点后的所有数字。

您将value声明为intvalue=a[j+1];语句会将a[j+1]float类型)的值截断为int。将value声明为float

float value = 0.0f;