为什么c语言中,正常的冒牌排序不可以排浮点型,只能排列整形?
浮点型可以排序的,参考如下:
#include<stdio.h>
void sort(double a[], int len);
int main()
{
int i;
double b[5] = {4.2, 7.4, 3.4, 2.3, 5.4};
sort(b, 5);
for(i = 0; i < 5; i++)
{
printf("%.2lf ", b[i]);
}
return 0;
}
void sort(double a[], int len)
{
int i, j;
double t;
for(i = 0; i < len - 1; i++)
{
int flag = 0; // 是否冒泡标识
for(j = 0; j < len - i - 1; j++)
{
if (a[j] > a[j + 1]) // 从小到大冒泡
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
flag = 1; // 冒过泡了
}
}
if (!flag) // 都没有冒泡,说明已排序好,直接跳出循环
break;
}
}
不可能,只有一个可能,你写错了
但是,在实现冒泡排序时需要考虑浮点数比较的精度问题。由于浮点数在计算机中的存储方式是近似表示的,因此在比较时需要考虑到精度误差。一般来说,可以通过设置一个极小值(比如1e-6)来判断两个浮点数是否相等,从而进行排序。
因为你把中间变量定义成整型了
类型一致就可以转才对
以下答案引用自GPT-3大模型,请合理使用:
C语言中,由于float类型的数据只能保留一定的精度,而冒号排序是基于比较大小来进行排序的,所以无法正确的排列具有浮点类型的数据。
举个例子,比如要排序以下五个数据:
0.6 0.3 0.4 0.2 0.1
这五个数字在内存中,可能是这样的:
0.600000023841858 0.300000011920929 0.400000005960464 0.200000002980023 0.100000001490116
当进行比较时,可能出现结果不正确的情况,比如,0.300000011920929比0.200000002980023大,但在正常情况下,应该0.3比0.2小。
如果想要正确的实现对浮点数的排序,可以使用基于快速排序的算法等更复杂的排序算法。以下是用C语言实现的一个冒泡排序算法代码:
#include<stdio.h>
void bubble_sort(float arr[], int n)
{
int i, j;
float temp;
for (i = 0; i < n-1; i++)
// Last i elements are already in place
for (j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
// Driver program to test above functions
int main()
{
float arr[5]={0.6,0.3,0.4,0.2,0.1};
int n=5;
bubble_sort(arr, n);
for (int i=0;i<n;i++)
printf("%.6f ",arr[i]);
return 0;
}
如果我的回答解决了您的问题,请采纳我的回答