单链表第六题(单链表排序)

 6.有一个带头节点的单链表L,设计一个算法使其元素递增有序。

/*

        有一个带头节点的单链表L;设计一个算法使其递增有序,

         分析:

                  我们可以采用冒泡排序对其操作,使其递增有序,时间复杂度为O(n^2).

*/

#define_CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

#include"linkStrcut.h"//通过自创建文件引入结构体,ctrl+鼠标左键点击即可查看

void      bubbleSort(Link  *h){//冒泡排序

        int flag=0;//排序标志,产生过变动就置为1

        int  count=0;//记录链表长度

        Link    *pre=h,*p=h->next,*r;

        while(p){

             count++;

             p=p->next;

             }

 p=h->next;

for(int  i=0;i<count;i++){

        flag=0;

         while(p->next){//开始第i+1轮冒泡

               if(P->data>p->next->data){//前者大于后者,则需要交换

                          r=p->next->next;//r指向下一个节点,防止断链

                          pre->next=p->next;

                          p->next->next=p;

                           pre=p->next;

                           p->next=r;

                            flag=1;//有改动,flag置为1

                   }  

                    else{

                           pre=p;

                           p=p->next;

                             }

                }

                 if(!flag)        break;//若某一轮链表未作变换,则认定已经排好序,退出循环

                 pre=h;//重新从头开始遍历

                  p=h->next;

         }

}

int   main(){

           Link* createLink(int);

           Link    *head;

           head=createLink(0);

           bubbleSort(head);

           printf("排序后链表值为:");

           while(head->next){

                  printf("%d ",head->next->data);

                   head=head->next;

            }    

          return      0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值