鱼C论坛

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

冒泡排序

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

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

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

x
为什么这个冒泡排序不成功
void Bubble_sort(SqList &L1,int n)
{
        int i,j,temp;
        bool change=true;
        L1.r = (RedType*)malloc(sizeof(RedType) * MAXSIZE);
        L1.length=1;
        for(i=1;i<=n;i++)
        {
                scanf("%d",&L1.r[i].key);
                L1.length++;
        }
        for(i=1;i<L1.length;i++){
                change=false;
                for(j=1;j<L1.length-i;j++)
                {
                        if(L1.r[j].key>L1.r[j+1].key)
                        {
                                temp=L1.r[j].key;
                                L1.r[j].key=L1.r[j+1].key;
                                L1.r[j].key=temp;
                                change=true;
                                cm[2].mvn++;
                        }
                }
        }
        printf("排序后的数据序列为:");
        for(i=1;i<L1.length;i++){
                printf("%d ",L1.r[i].key);
        }
        printf("\n比较次数:%d\n", cm[2].cpn);
    printf("移动次数:%d\n", cm[2].mvn);                
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

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

下面是修正过的代码:
++void Bubble_sort(SqList &L1,int n){    int i,j,temp;    bool change=true;    L1.r = (RedType*)malloc(sizeof(RedType) * n); // 分配n个元素大小的内存空间    L1.length=n; // 设置序列长度为n    for(i=1;i<n && change;i++) // 修改循环条件    {        change=false; // 初始化change为false        for(j=0;j<n-i;j++)        {            if(L1.r[j].key > L1.r[j+1].key)            {                temp = L1.r[j];                L1.r[j] = L1.r[j+1];                L1.r[j+1] = temp;                change=true; // 发生交换时将change设置为true            }        }    }}
这样修改之后,冒泡排序应该就能够顺利执行了。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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