zoukankan      html  css  js  c++  java
  • 单链表排序

    算法思想:采用直接插入排序算法的思想,先构成只含一个数据结点的有序单链表,然后一次扫描剩下的结点p(直至p==NULL为止),在有序表中通过比较查找插入p的前驱结点pre,然后将p插入到*pre之后
    核心代码

    void Sort(LinkList *L){
    	LinkList *p,*r,*pre;
    	p=L->next;
    	r = p->next;   //保持r是p的后继结点,以保证不断链
    	p->next = NULL; //构造一个只有一个数据结点的有序表 就是让一个有序表的长度为1
    	p=r;
    	while(p){
    		r=p->next;  //保存p的后继结点指针
    		pre = L;
    		while(pre->next!=NULL && pre->next->data < p->data)
    			pre = pre->next;
    
    		p->next = pre->next;
    		pre->next = p;
    
    		p = r;  //扫描剩下的结点
    	}
    display(L);
    }
    

    运行代码

    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    #include <string.h>
    struct LinkList{
    	int data;
    	struct LinkList *next;
    };
    void display(LinkList *L){
    	if (L->next)
    	{
    		printf("%d ",L->next->data);
    		display(L->next);
    	}else{
    		printf("
    ");
    	}
    }
    void Sort(LinkList *L){
    	LinkList *p,*r,*pre;
    	p=L->next;
    	r = p->next;   //保持r是p的后继结点,以保证不断链
    	p->next = NULL; //构造一个只有一个数据结点的有序表 就是让一个有序表的长度为1
    	p=r;
    	while(p){
    		r=p->next;  //保存p的后继结点指针
    		pre = L;
    		while(pre->next!=NULL && pre->next->data < p->data)
    			pre = pre->next;
    
    		p->next = pre->next;
    		pre->next = p;
    
    		p = r;  //扫描剩下的结点
    	}
    display(L);
    }
    int main(){
    	LinkList *L = (struct LinkList *)malloc(sizeof(struct LinkList));
    	int a[] = {1,5,2,7,4,7,8,54,8,34,8,3,8,3};
    	int n = sizeof(a)/(sizeof(int));
    	int h = 0;
    	L->next = NULL;
    	LinkList *p;
    	for (int i=0;i<n;i++)
    	{
    		p = (struct LinkList *)malloc(sizeof(struct LinkList));
    		p->data =a[h++];
    		p->next = L->next;
    		L->next = p;
    	}
    Sort(L);
    
    
    	return 0;
    }
    
  • 相关阅读:
    BZOJ2111: [ZJOI2010]Perm 排列计数
    BZOJ1951: [Sdoi2010]古代猪文
    组合数取模
    BZOJ2226: [Spoj 5971] LCMSum
    BZOJ2820: YY的GCD
    数据结构讲题选做
    解题:HAOI 2015 按位或
    解题:SHOI 2006 有色图
    解题:洛谷 4986 逃离
    解题:HNOI 2013 Cards
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781677.html
Copyright © 2011-2022 走看看