鱼C论坛

 找回密码
 立即注册
查看: 578|回复: 7

[已解决]编写函数实现冒泡法对实型数组从小到大排序。

[复制链接]
发表于 2023-12-25 12:49:26 | 显示全部楼层 |阅读模式
10鱼币
编写函数实现冒泡法对实型数组从小到大排序。在主函数中首先输入一个整数N(1<N<=100),然后再输入N个实数存入数组中,调用你编写的函数排序后输出数组所有元素。

输入样例:
5
2  3.5  1.0  0.618  1.142
输出样例:
0.6180 1.0000 1.1420 2.0000 3.5000
这是我的代码
  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int N;
  5.     scanf("%d",&N);
  6.     double a[N];
  7.     int n,i,j,k,t;
  8.   
  9.     for(i=0;i<N;i++)          //遍历输入
  10.         scanf("%lf",&a[i]);
  11.    
  12.     for(k=1;k<=N-1;k++)              //外层循环表示共n-1趟排序
  13.         {
  14.             for(i=0;i<N-k;i++)           //内层循环进行第k趟排序
  15.             if(a[i]>a[i+1])
  16.             {         //比较交换
  17.                 t=a[i];
  18.                 a[i]=a[i+1];
  19.                 a[i+1]=t;
  20.             }
  21.         }
  22.     for(i=0;i<N;i++)
  23.     {          //遍历输出
  24.         if(i>0)
  25.         printf(" ");
  26.         printf("%.4lf",a[i]);
  27.     }
  28.     //排序完成
  29.    
  30.     return 0;
  31. }
复制代码

问题就是有两组数据,如下
第一组测试输入:
5
2  3.5  1.0  0.618  1.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
请问怎么解决啊
最佳答案
2023-12-25 12:49:27
  1. #include <stdio.h>

  2. int main(){
  3.     int n;
  4.     int i,j;
  5.     double temp;

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

  8.     double array[n];

  9.     for (i = 0; i < n; i++){
  10.         scanf("%lf",&array[i]);
  11.     }

  12.     for (i = 0; i < n-1; i++){
  13.         for (j = 0; j < n-i-1; j++){    //  此处 j < n-i-1
  14.             if (array[j] > array[j+1]){
  15.                 temp = array[j];
  16.                 array[j] = array[j+1];
  17.                 array[j+1] = temp;
  18.             }
  19.         }
  20.     }

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

  24.     return 0;
  25. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 12:49:27 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

  2. int main(){
  3.     int n;
  4.     int i,j;
  5.     double temp;

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

  8.     double array[n];

  9.     for (i = 0; i < n; i++){
  10.         scanf("%lf",&array[i]);
  11.     }

  12.     for (i = 0; i < n-1; i++){
  13.         for (j = 0; j < n-i-1; j++){    //  此处 j < n-i-1
  14.             if (array[j] > array[j+1]){
  15.                 temp = array[j];
  16.                 array[j] = array[j+1];
  17.                 array[j+1] = temp;
  18.             }
  19.         }
  20.     }

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

  24.     return 0;
  25. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 12:49:41 | 显示全部楼层
好的,下面是实现冒泡排序的代码:
  1. def bubble_sort(arr):
  2.     n = len(arr)
  3.     for i in range(n - 1):
  4.         for j in range(n - i - 1):
  5.             if arr[j] > arr[j + 1]:
  6.                 arr[j], arr[j + 1] = arr[j + 1], arr[j]
  7. # 在主函数中使用该函数进行排序
  8. if __name__ == '__main__':
  9.     N = int(input("请输入数组的长度:"))
  10.     arr = []
  11.     for i in range(N):
  12.         num = float(input("请输入第{}个元素的值:".format(i + 1)))
  13.         arr.append(num)
  14.     print("排序前的数组:", arr)
  15.     bubble_sort(arr)
  16.     print("排序后的数组:", arr)
复制代码

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 12:50:54 | 显示全部楼层
FishC 发表于 2023-12-25 12:49
好的,下面是实现冒泡排序的代码:

gun
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 12:51:00 | 显示全部楼层

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:43:52 | 显示全部楼层
问题出在变量 t,你定义的是 int,但数组 a 是 double。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 16:00:21 | 显示全部楼层
小甲鱼的二师兄 发表于 2023-12-25 15:43
问题出在变量 t,你定义的是 int,但数组 a 是 double。

第二组测试数组,第三个数前面多了一个点,怎么解决吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 16:35:44 | 显示全部楼层
王小二° 发表于 2023-12-25 16:00
第二组测试数组,第三个数前面多了一个点,怎么解决吗

那个点一看就是录入的时候不小心多敲的呀,哪有 .3.12 这样的数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 16:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表