王小二° 发表于 2023-12-25 12:49:26

编写函数实现冒泡法对实型数组从小到大排序。

编写函数实现冒泡法对实型数组从小到大排序。在主函数中首先输入一个整数N(1<N<=100),然后再输入N个实数存入数组中,调用你编写的函数排序后输出数组所有元素。

输入样例:
5
23.51.00.6181.142
输出样例:
0.6180 1.0000 1.1420 2.0000 3.5000
这是我的代码
#include<stdio.h>

int main()
{
    int N;
    scanf("%d",&N);
    double a;
    int n,i,j,k,t;

    for(i=0;i<N;i++)          //遍历输入
      scanf("%lf",&a);
   
    for(k=1;k<=N-1;k++)            //外层循环表示共n-1趟排序
      {
            for(i=0;i<N-k;i++)         //内层循环进行第k趟排序
            if(a>a)
            {         //比较交换
                t=a;
                a=a;
                a=t;
            }
      }
    for(i=0;i<N;i++)
    {          //遍历输出
      if(i>0)
      printf(" ");
      printf("%.4lf",a);
    }
    //排序完成
   
    return 0;
}
问题就是有两组数据,如下
第一组测试输入:
5
23.51.00.6181.142
—— 预期输出 ——
0.6180 1.0000 1.1420 2.0000 3.5000
—— 实际输出 ——
0.6180 1.0000 1.1420 2.0000 3.0000
第二组测试输入:
5
1.23 2.13 .3.12 2.31 1.32
—— 预期输出 ——
0.1200 0.3000 1.2300 2.1300 2.3100

—— 实际输出 ——
0.0000 0.0000 1.0000 2.0000 2.3100
请问怎么解决啊

Husj0711 发表于 2023-12-25 12:49:27

#include <stdio.h>

int main(){
    int n;
    int i,j;
    double temp;

    printf("请输入一个整数:");
    scanf("%d",&n);

    double array;

    for (i = 0; i < n; i++){
      scanf("%lf",&array);
    }

    for (i = 0; i < n-1; i++){
      for (j = 0; j < n-i-1; j++){    //此处 j < n-i-1
            if (array > array){
                temp = array;
                array = array;
                array = temp;
            }
      }
    }

    for (i = 0; i < n; i++){
      printf("%.4lf ",array);
    }

    return 0;
}
{:10_310:}

FishC 发表于 2023-12-25 12:49:41

好的,下面是实现冒泡排序的代码:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n - 1):
      for j in range(n - i - 1):
            if arr > arr:
                arr, arr = arr, arr

# 在主函数中使用该函数进行排序
if __name__ == '__main__':
    N = int(input("请输入数组的长度:"))
    arr = []
    for i in range(N):
      num = float(input("请输入第{}个元素的值:".format(i + 1)))
      arr.append(num)

    print("排序前的数组:", arr)
    bubble_sort(arr)
    print("排序后的数组:", arr)

以上代码中,我们定义了一个`bubble_sort`函数,对传入的数组进行冒泡排序。然后在主函数中,首先输入一个整数N表示数组的长度,然后循环输入N个数组元素的值。最后调用`bubble_sort`函数对数组进行排序,并打印出排序前后的数组。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

王小二° 发表于 2023-12-25 12:50:54

FishC 发表于 2023-12-25 12:49
好的,下面是实现冒泡排序的代码:



gun

FishC 发表于 2023-12-25 12:51:00

王小二° 发表于 2023-12-25 12:50
gun

很抱歉,似乎您的输入有误。"gun"是什么意思?请问有什么问题我可以帮助您解答吗?

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2023-12-25 15:43:52

问题出在变量 t,你定义的是 int,但数组 a 是 double。

王小二° 发表于 2023-12-25 16:00:21

小甲鱼的二师兄 发表于 2023-12-25 15:43
问题出在变量 t,你定义的是 int,但数组 a 是 double。

第二组测试数组,第三个数前面多了一个点,怎么解决吗

小甲鱼的二师兄 发表于 2023-12-25 16:35:44

王小二° 发表于 2023-12-25 16:00
第二组测试数组,第三个数前面多了一个点,怎么解决吗

那个点一看就是录入的时候不小心多敲的呀,哪有 .3.12 这样的数?
页: [1]
查看完整版本: 编写函数实现冒泡法对实型数组从小到大排序。