链表直接插入排序法

#include <stdio.h>
#include <stdlib.h>

//链表结构
typedef struct Lnode
{
    int data;
    struct Lnode* next;
}Lnode;
//打印链表
void printList(Lnode* head)
{
    Lnode* p=head->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }

}
//直接插入排序法
void Sort_LinkedList(Lnode* head)
{
   Lnode* p=head->next->next;//永远指向无序区间的第一个
   head->next->next=NULL; //将有序区间的最后一个指针赋空
   while(p!=NULL)
   {
      //将节点信息拷贝一份
      Lnode* temp=(Lnode*)malloc(sizeof(Lnode));
      temp->data=p->data;
      temp->next=NULL;

     /*将temp插入到有序区间中*/
     Lnode* q1=head;
     Lnode* q2=head->next;
     while(q2!=NULL)
     {

        if(q2->data<=temp->data)
        {
           q1=q1->next;
           q2=q2->next;
        }
        else
        {
          temp->next=q1->next;
          q1->next=temp;
          break;
        }
     }
     if(q2==NULL)
     {
        q1->next=temp;
     }
     p=p->next;
   }

}`在这里插入代码片`
int main()
{
    //初始化构造一个无序链表
    int n;
    scanf("%d",&n);
    Lnode* list=(Lnode*)malloc(sizeof(Lnode));
    Lnode* head;
    Lnode* rear;
    head=list;
    rear=list;
    while(n--)
    {
        int num;
        scanf("%d",&num);
        Lnode* node=(Lnode*)malloc(sizeof(Lnode));
        node->data=num;
        node->next=NULL;
        rear->next=node;
        rear=node;
    }
    Sort_LinkedList(list);
    printList(list);
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值