考上研究僧 2022-04-13 21:37 采纳率: 97.4%
浏览 19
已结题

链表的冒泡排序问题请教

可以帮我看下这个冒泡排序有什么问题吗,在VS上运行不出来


//冒泡排序
void BubbleSort(Student* L)
{
    Student* p=NULL, * q=NULL, * pre = L;
    int count = 0;//学生数(结点数)
    p = L->next;
    while (p)
    {
        count++;
        p = p->next;
    }
    printf("1.represent the chinese:\n");
    printf("2.represent the math:\n");
    printf("3.represent the english:\n");
    int item;
    printf("you choose subject:");
    scanf_s("%d", &item);
    switch (item)
    {
    case 1:
    {
        while (--count)//控制调序次数
        {
            p = L->next;
            q = L->next->next;
            while (p && q)//相邻元素进行比较
            {
                if (p->chinese < q->chinese)//若前者p小于后者q,则二者交换次序,同时前移pre指针(使整体比较向前进)
                {
                    p->next = q->next;
                    pre->next = q;
                    q->next = p;
                    q = p->next;
                    pre = pre->next;
                }
                else//若前者不小于后者,这将pre,p,q三指针均后移
                {
                    pre = p;
                    p = p->next;
                    q = q->next;
                }
            }
        }
        break;
    }
    case 2:
    {
        while (--count)
        {
            p = L->next;
            q = L->next->next;
            while (p && q)
            {
                if (p->math < q->math)
                {
                    p->next = q->next;
                    pre->next = q;
                    q->next = p;
                    q = p->next;
                    pre = pre->next;
                }
                else
                {
                    pre = p;
                    p = p->next;
                    q = q->next;
                }
            }
        }
        break;
    }
    case 3:
    {
        while (--count)
        {
            p = L->next;
            q = L->next->next;
            while (p && q)
            {
                if (p->english < q->english)
                {
                    p->next = q->next;
                    pre->next = q;
                    q->next = p;
                    q = p->next;
                    pre = pre->next;
                }
                else
                {
                    pre = p;
                    p = p->next;
                    q = q->next;
                }
            }
        }
        break;
    }
    }
    ShowList(L);//输出已排序链表
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月21日
    • 创建了问题 4月13日

    悬赏问题

    • ¥15 LLM accuracy检测
    • ¥15 pycharm添加远程解释器报错
    • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
    • ¥15 如何能达到用ping0.cc检测成这样?如图
    • ¥15 关于#DMA固件#的问题,请各位专家解答!
    • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
    • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
    • ¥20 微信小程序 canvas 问题
    • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
    • ¥15 怎么把512还原为520格式