链表实现插入排序

原创 2015年07月10日 16:59:27
word* link_sort_by_cnt(word* head)
{
	word* pcur,*ppre,*pwork,*pnext;
	if(head==NULL||head->next==NULL)
		return head;
	pwork=head;//head=NULL
	while(pwork)
	{
		pnext=pwork->next;
		pwork->next=NULL;
		pcur=head;
		ppre=NULL;
		while(pcur){
			if(pcur->cnt<pwork->cnt){
				ppre=pcur;
				pcur=pcur->next;
			}else{
				break;
			}
		}
		if(ppre==NULL){
			pwork->next=pcur;
			head=pwork;
		}else{
			ppre->next=pwork;
			pwork->next=pcur;
		}
		pwork=pnext;
	}
	return head;
}
//word* link_sort_by_cnt(word* phead)
{
	word* pCur, *pPre,* pNext,*pWork ;
	pWork = phead ;
	phead = NULL ;
	while(pWork)
	{
		pNext = pWork ->next ;

		pCur = phead ;
		pPre = NULL;
		while(pCur)
		{
			if(pWork ->cnt < pCur ->cnt)
			{
				pPre = pCur ;
				pCur = pCur ->next ;
			}else
			{
				break ;
			}
		}
		if(pPre == NULL)
		{
			pWork ->next = pCur ;
			phead = pWork ;
		}else 
		{
			pPre ->next = pWork ;
			pWork ->next = pCur ;
		}
		pWork = pNext ;
	}
	return phead;
}
//自己的版本 新建头结点,把原来的链表断开,把原链表的节点安装到新的链表(原节点)上
word* link_sort_by_cnt(word* phead)
{
	word* nh=NULL;
	word* pwork=phead;
	word* pcur;
	word* pnext;
	word* pre;
	while(pwork)
	{
		pnext=pwork->next;
		pcur=nh;
		pre=NULL;
		while(pcur)
		{
			if(pcur->cnt<pwork->cnt)
			{
				pre=pcur;
				pcur=pcur->next;
			}else
				break;
		}
		if(pre==NULL)
		{
			pwork->next=pcur;
			nh=pwork;
		}else
		{
			pre->next=pwork;
			pwork->next=pcur;
		}
		pwork=pnext;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

单链表实现插入排序

//单链表实现插入排序,基本思想是先生成一个空链表,然后将待排序链表的结点依次插入 //这个空链表中,所有结点都插入完毕后,这个新生成的链表就是所需的有序链表 typedef struct node ...
  • Sun19910114
  • Sun19910114
  • 2014年08月22日 23:18
  • 1872

在单链表上实现插入排序

问题:给单链表排序(升序排列,要保持稳定性),要求通过改变结点的next指针从而改变结点的位置,而不是只交换结点的值来使得其有序!时间复杂度为O(N^2),空间复杂度为O(1)。...
  • Jacketinsysu
  • Jacketinsysu
  • 2016年09月17日 20:10
  • 3826

C语言链表插入排序

C语言链表插入排序 大家好,我就是人见人爱 花见花开车见爆胎的小智 声音依旧是那么低沉切性感,现在又来给大家更新博客的第一视角了。 这期给大家介绍的是链表的插入排序。 具体代码如下: st...
  • wyz745322878
  • wyz745322878
  • 2015年05月10日 22:56
  • 859

链表进行插入排序

插入排序:在已排好序的序列中,找到当前要排序元素的插入位置即可。如果我们对链表进行排序,我们只需要找到当前插入位置的前一个指针即可。然后当前元素向前移动一位。//对单向链表进行快速排序 #includ...
  • yang20141109
  • yang20141109
  • 2016年04月22日 22:05
  • 790

单向链表插入排序 Java

package linkedList; /** * Definition for singly-linked list. * public class ListNode * { * ...
  • stephenluu
  • stephenluu
  • 2014年04月13日 10:44
  • 2255

lintcode-链表插入排序

用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null /** * Definition of ListNo...
  • ljlstart
  • ljlstart
  • 2015年10月24日 22:27
  • 1031

链表——单链表的归并排序和插入排序

题目要求: 对单链表进行从小到大排序,要求时间复杂度O(N*logN),空间复杂度O(1); 思路: 因时间复杂度要求为O(N*logN),简单排序(时间复杂度为O(N*N))均不可用, 故可以考...
  • jingsuwen1
  • jingsuwen1
  • 2016年05月09日 09:59
  • 2586

lintcode 173 单链表插入排序 python

""" Definition of ListNode class ListNode(object): def __init__(self, val, next=None): ...
  • m0_37548792
  • m0_37548792
  • 2017年08月20日 14:26
  • 160

单链表的插入排序(详细图解说明)

题目:实现一个单链表的插入排序 如图所示,解决这个问题的关键 (1)首先必须维护当前节点的前指针, (2)然后还要维护要插入的位置的前后指针, (3)每个要插入的节点都要从头开...
  • hairongtian
  • hairongtian
  • 2011年12月10日 10:48
  • 9448

LintCode 链表插入排序

用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->nullSort a linked list using insertion so...
  • wutingyehe
  • wutingyehe
  • 2015年06月25日 15:19
  • 977
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表实现插入排序
举报原因:
原因补充:

(最多只允许输入30个字)