基于单链表的直接插入排序算法和代码实现
来源:互联网 发布:寻秦ol源码 编辑:程序博客网 时间:2024/03/28 22:02
在链表上对直接插入排序算法的思想:
在带头结点的单链表L 中,如果将已有元素进行升序(或降序)排列,可先将原单链表L 暂时断成两条短链L1和L2,新链L1的头结点用原链L 的头结点(head),并且链L1中仅放一个元素即原链的第一个元素。而链L2中的头结点可从原链的第二个元素开始,然后用L2中的第一个元素与L1中的第一个元素作比较链入链L1中,接着继续在L2中取一个元
素让它跟链L1中的第一个元素开始依次向后比较找相应位置插入完成排序操作。后面元素的排序同理,直到将链L2中的所有的元素取完为止。
代码实现:
//单链表上实现直接插入排序//输入任意N个数,按“回车”结束输入。递增排序后输出(若要实现递减,修改"l1->data<l2->data"为“l1->data>l2->data”)。#include <stdio.h>#include <stdlib.h>typedef struct node //定义单链表结点{ int data; //数据域 struct node *next;//指针域}linklist;void creatlist(linklist *head) //尾插法建立单链表{ linklist *p,*q;//p是指向新分配节点的指针,q是已分配链表尾指针 int i=0; int x=0; int j=0; printf("please input the node:\n"); while(1) { scanf("%d",&x); p=(linklist *)malloc(sizeof(linklist)); p->data=x; if(++i==1) //头指针指向第一个结点 { head->next=p; } else //链入新结点 { q->next=p; } q=p; //更新尾指针 q->next=NULL; //尾指针置空 if(getchar()=='\n')//按回车结束输入 { break; } }//end while}void sortlist(linklist *head) //插入排序在单链表上的实现{ linklist *newhead, *pre, *l1, *l2,*l; l1=head->next; //变量p用来存放链L1的头结点地址 newhead=l1->next; //newhead用来标记链L2的头结点的地址 l1->next=NULL; //将原来的链L断开 while(newhead) //判断:1.原链L中元素不少于两个。2.新链L2中还有元素未插入L1 { l2=newhead; //l2指向待插入结点(链L2的头结点) newhead=newhead->next; //l2去掉头结点后头指针后移 pre=head; //pre指向链L1待插入位置的前驱 l1=head->next; //l1指向链L1待插入位置的后继 while(l1!=NULL&&l1->data<l2->data)//与L1中元素作比较 { pre=l1;//依次向后找合适的插入点 l1=l1->next; } l2->next=l1; pre->next=l2;//将L2中元素链入L1中合适位置 } l=head->next; printf("insert-sort output:\n"); while(l) //依次输出排序后链表元素 { printf("%d ",l->data); l=l->next; }}void main(){ linklist *h; h=(linklist *)malloc(sizeof(linklist)); //建头结点 h->next=NULL; //初始化头指针 creatlist(h); sortlist(h);}
欢迎交流和指正!- -
2 0
- 基于单链表的直接插入排序算法和代码实现
- 基于数组的直接插入排序算法和代码实现
- 【数据结构与算法】【排序】直接插入排序的代码实现
- 直接插入排序算法分析、代码实现
- 直接插入排序的算法思想和实现过程
- 直接插入排序的C++实现代码
- python实现的直接插入排序算法
- C语言直接插入排序和折半插入排序算法的实现
- 八种排序算法Java实现-直接插入和带哨兵的插入排序
- 实现直接插入排序算法
- 直接插入排序算法实现
- 直接插入排序算法实现
- 排序算法--插入排序(直接插入排序、折半插入、shell排序)的java实现
- 各种排序算法的实现-1(直接插入排序)
- [排序算法]--直接插入排序的三种实现(Java)
- 【排序算法】直接插入排序(java实现)
- 排序算法--Java实现直接插入排序
- JAVA 实现直接插入排序算法的实现
- Oracle11g的安装
- 腾讯娱乐讯 据东方日报报道,韩国男团EXO近年在
- 实现复数类的运算重载
- 文本导入sql server 出错:数据转换失败
- Android onTouchListener 触屏接口总结
- 基于单链表的直接插入排序算法和代码实现
- android解析XML总结(SAX、Pull、Dom三种方式)
- aspxbutton 客户端点击事件 aspximage客户端自适应图片高宽度
- java android HTTP应用程序设计
- C++中引用、指针的指针、指针的引用解析
- UVaOJ_10003 - Cutting Sticks
- Android 来电话弹出自己的Activity
- dataguard 主备切换(无损切换switchover)
- Python引用多层目录结构的包里的Module