鱼C论坛

 找回密码
 立即注册
查看: 266|回复: 1

冒泡排序

[复制链接]
发表于 2023-12-13 20:47:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么这个冒泡排序不成功
  1. void Bubble_sort(SqList &L1,int n)
  2. {
  3.         int i,j,temp;
  4.         bool change=true;
  5.         L1.r = (RedType*)malloc(sizeof(RedType) * MAXSIZE);
  6.         L1.length=1;
  7.         for(i=1;i<=n;i++)
  8.         {
  9.                 scanf("%d",&L1.r[i].key);
  10.                 L1.length++;
  11.         }
  12.         for(i=1;i<L1.length;i++){
  13.                 change=false;
  14.                 for(j=1;j<L1.length-i;j++)
  15.                 {
  16.                         if(L1.r[j].key>L1.r[j+1].key)
  17.                         {
  18.                                 temp=L1.r[j].key;
  19.                                 L1.r[j].key=L1.r[j+1].key;
  20.                                 L1.r[j].key=temp;
  21.                                 change=true;
  22.                                 cm[2].mvn++;
  23.                         }
  24.                 }
  25.         }
  26.         printf("排序后的数据序列为:");
  27.         for(i=1;i<L1.length;i++){
  28.                 printf("%d ",L1.r[i].key);
  29.         }
  30.         printf("\n比较次数:%d\n", cm[2].cpn);
  31.     printf("移动次数:%d\n", cm[2].mvn);               
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-13 20:47:55 | 显示全部楼层
冒泡排序是一种简单的排序算法,它重复地遍历要排序的序列,一次比较两个相邻的元素,并且交换他们的位置,如果他们的顺序错误就交换。直到没有再需要交换的元素,排序完成。

在你提供的代码中,有几个问题会导致冒泡排序不成功:

1. L1.r的初始化:你将L1.r指向了一个动态分配的内存空间,但没有为其赋值。

2. L1.length的初始化:你将L1.length初始化为了1,但实际上应该是n。

3. 排序结束的条件:你使用了一个change变量来判断是否还需要继续排序,但你并没有在排序发生交换时将change设置为true,导致无法正确判断排序是否完成。

下面是修正过的代码:
  1. ++
  2. void Bubble_sort(SqList &L1,int n)
  3. {
  4.     int i,j,temp;
  5.     bool change=true;
  6.     L1.r = (RedType*)malloc(sizeof(RedType) * n); // 分配n个元素大小的内存空间
  7.     L1.length=n; // 设置序列长度为n
  8.     for(i=1;i<n && change;i++) // 修改循环条件
  9.     {
  10.         change=false; // 初始化change为false
  11.         for(j=0;j<n-i;j++)
  12.         {
  13.             if(L1.r[j].key > L1.r[j+1].key)
  14.             {
  15.                 temp = L1.r[j];
  16.                 L1.r[j] = L1.r[j+1];
  17.                 L1.r[j+1] = temp;
  18.                 change=true; // 发生交换时将change设置为true
  19.             }
  20.         }
  21.     }
  22. }
复制代码

这样修改之后,冒泡排序应该就能够顺利执行了。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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