1、对于链表来说,由于其元素的访问只能是顺序访问,而快速排序是改进后的冒泡排序,需要随机存取数据,不合适。采用归并排序方式对链表元素进行访问;
2、需要的步骤
1) 分割:将一段链表分成两部分
2) 排序:将两端已经有序的链表合并
3)分治递归:递归操作
//将链表Plist分割,并把分割后的两段链表第一个元素节点通...
分类:
编程语言 时间:
2016-05-07 11:22:06
阅读次数:
224
题目:输入俩个递增排序的链表,合并这两个链表,使合并后的链表任然是有序的。 struct ListNode{ int value; ListNode* next; }; 利用递归实现的代码如下: ...
分类:
其他好文 时间:
2016-04-26 01:58:12
阅读次数:
156
//合并两个已序单链表PSListNodeMergeList(PSListNodepL1,PSListNodepL2){PSListNodepNewHead=NULL;PSListNodepL1Node=pL1;PSListNodepL2N0de=pL2;PSListNodepNode=NULL;PSListNodepTailNode=NULL;if(pL1==NULL){returnpL2;}if(pL2==NULL){returnpL1;}if(pL1Node->data>p..
分类:
其他好文 时间:
2016-04-06 11:39:25
阅读次数:
185
合并单链表-->一、解决方法:确保两个单链表不为空,且二者皆有序(若无序,则先进行排序)创建新的单链表,并比较原本两个单链表数据大小,较小者置于新单链表中逐步将两个单链表的数据置于新单链表中,直至二者为空二、程序代码:ListNode*MergeList(ListNode*L1,ListNode..
分类:
其他好文 时间:
2016-03-28 22:02:07
阅读次数:
242
/归并[)升序
//使用链表合并思想
voidMerge(int*src,int*dest,intbegin1,intend1,intbegin2,intend2)
{
assert(src&&dest);
intindex=begin1;//两个区间挨着
while(begin1<end1&&begin2<end2)
{
if(src[begin1]<src[begin2])
{
dest[index..
分类:
编程语言 时间:
2016-03-27 15:57:15
阅读次数:
196
有序A={1,7,8} 有序B={2,4,6,8,10,11} 求A+B?
分类:
其他好文 时间:
2016-03-16 08:22:43
阅读次数:
203
链表合并,启发式合并,由于是启发式合并,所以还要开一个数组记录实际是哪个颜色。
分类:
其他好文 时间:
2016-03-13 06:22:55
阅读次数:
135
【题目】 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是依照递增排序的。 【分析】 合并单链表,须要找到头结点,对照两个链表头结点后,确定头结点,再确定头结点下一个结点,循环递归的如前面一样操作确定每一个结点位置,同一时候考虑边界条件,假设两个链表为空。则肯定无需合并了,就是空链表,
分类:
编程语言 时间:
2016-02-29 12:43:38
阅读次数:
326
题目:合并两个有序链表。递归实现参考代码:LinkList*Merge(LinkList*pHead1,LinkList*pHead2)
{
if(pHead1==NULL)
{
returnpHead2;
}
elseif(pHead2==NULL)
{
returnpHead1;
}
LinkList*pNewMergeHead=NULL;
if((pHead1->data)<(pHead2->data))
{
pN..
分类:
其他好文 时间:
2016-02-20 01:52:35
阅读次数:
172
#include<stdio.h>
#include<stdlib.h>
#defineN10
typedefstructstudent
{
intnum;
floatscore;
structstudent*next;
}stu;
stu*creat()
{
inti;
stu*p,*head=NULL,*tail=head;
for(i=0;i<N;i++)
{
p=(stu*)malloc(sizeof(stu));
scanf("%d%f",&p->nu..
分类:
其他好文 时间:
2016-02-19 14:31:55
阅读次数:
239