c语言冒泡排序相关问题

为什么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.3000000119209290.200000002980023大,但在正常情况下,应该0.30.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; 
}

如果我的回答解决了您的问题,请采纳我的回答