`
betakoli
  • 浏览: 168744 次
社区版块
存档分类
最新评论

链表的归并排序

 
阅读更多
class Node {
	int num;
	Node next;

	Node(int num) {
		this.num = num;
	}
}

public class TestA {
	public static void main(String[] args) {
		int a[] = { 3, 1, 6, 8, 4, 2, 8, 4 };
		TestA tA = new TestA();
		Node node = tA.create(7, a);
		Node node1 = tA.split(node);
		while (node1 != null) {
			System.out.print(node1.num);
			node1 = node1.next;
		}
	}

	public Node create(int i, int a[]) {
		if (i == 0) {
			return new Node(a[0]);
		}
		Node node = new Node(a[i]);
		node.next = create(i - 1, a);
		return node;
	}

	public Node split(Node head) {
		Node p = head;
		Node q = head;
		if (q == null || q.next == null) {
			return q;
		}
		while (q.next != null && q.next.next != null) {
			p = p.next;
			q = q.next.next;
		}
		Node temp = p.next;
		p.next = null;
		p = head;
		q = temp;
		Node p1 = split(p);
		Node p2 = split(q);
		Node p3 = join(p1, p2);
		return p3;
	}

	private Node join(Node p1, Node p2) {
		// TODO Auto-generated method stub
		Node head = new Node(0);
		Node t = head;
		while (p1 != null && p2 != null) {
			if (p1.num >= p2.num) {
				t.next = p1;
				t = t.next;
				p1 = p1.next;
			} else if (p1.num < p2.num) {
				t.next = p2;
				t = t.next;
				p2 = p2.next;
			}
		}
		if (p1 == null && p2 != null) {
			t.next = p2;
		} else if (p1 != null && p2 == null) {
			t.next = p1;
		}
		return head.next;
	}
}

 

分享到:
评论

相关推荐

    C语言中数据结构之链表归并排序实例代码

    C语言中数据结构之链表归并排序实例代码 问题  设有两个无头结点的单链表,头指针分别为ha,hb,链中有数据域data,链域next,两链表的数据都按递增排序存放,现要求将hb表归到ha表中,且归并后ha仍递增序,归并中...

    lianbiao.rar_链表_链表 合并 排序

    合并两个链表是一个常见的操作,可以用于合并排序后的部分。基本思路是: 1. 比较两个链表的首节点,将值较小的节点作为结果链表的首节点。 2. 保留较小节点的链表,对剩余部分重复此过程,直到其中一个链表为空。 3...

    JavaScript实现链表插入排序和链表归并排序

    在本篇技术文档中,介绍了如何使用JavaScript实现链表的两种常见排序算法:链表插入排序和链表归并排序。这两种排序算法在数据结构中占据着重要的位置,尤其是在链表这种非连续存储的数据结构中。下面详细介绍这两种...

    顺序表和链表的归并排序

    本文将深入探讨两种数据结构——顺序表和链表,并讲解如何使用面向对象的思想实现它们的归并排序。 首先,让我们了解顺序表和链表。顺序表是一种线性数据结构,它的特点是元素在内存中是连续存储的,可以通过索引来...

    链表的归并排序和快速排序

    **链表归并排序步骤**: 1. **分割**:找到链表的中间节点,将其后继节点设为null,从而将链表分为两个子链表。 2. **递归排序**:对两个子链表分别进行归并排序。 3. **合并**:将两个已排序的子链表合并成一个有序...

    双链表实现链表排序,合并等操作

    4. **链表排序**:可以使用归并排序(Merge Sort)算法对链表进行排序,它是一种分治策略,将链表分为两半,分别排序,然后合并。 ```cpp Node* mergeSort(Node* head) { if (head == nullptr || head-&gt;next == ...

    C语言实现多种链表快速排序

    4. **合并链表**:将排序后的两个子链表合并为一个有序链表。 在给定的文件中,`快速排序.cpp`可能包含了具体的C语言实现代码,`qsort.h`可能是自定义的快速排序函数头文件,用于处理链表数据。`vcxproj`文件是...

    归并排序(链表和数组) 数组和链表.pdf

    链表归并排序的算法思想是将链表分解成多个子链表,然后两两合并,直到得到一个有序的链表。 在链表归并排序中,我们需要定义一个链表节点结构体,包括节点的值和指向下一个节点的指针。然后,我们可以使用递归的...

    归并排序,排序等算法,数据结构,快速排序,链表排序

    一种链表排序算法是链表版的归并排序,它通过在链表节点间进行合并操作来实现排序。 此外,链表也可以用于实现快速排序,但需要额外处理指针的交换,这在实现上比数组版本更复杂。链表排序的效率通常取决于链表的...

    链表合并并按学号排序

    链表的合并排序采用了稳定的插入排序策略,其时间复杂度取决于链表的长度。最坏情况下,当一个链表中的所有元素都比另一个链表中的小或大时,时间复杂度为O(n^2),其中n为两个链表的总长度。然而,在实践中,尤其是...

    基于vc++6.0用链表实现归并排序

    归并排序的基本思想是将待排序序列分成两个子序列,分别对它们进行排序,然后将排序后的子序列合并为一个有序序列。这个过程可以递归地进行,直到每个子序列只包含一个元素。具体步骤如下: 1. **分割**:将原始...

    一个基于链表的归并排序程序

    1.编写一个基于链表的归并排序程序。 1)随机生成两个链表,利用随机数进行初始化 2)要求给出链表的结构,链表的初始化等排序中用到的基本操作函数 3)显示相关的输出信息 编程环境:Linux C

    c语言链表的排序算法-排序链表最快的算法是什么?.pdf

    我们将比较不同的排序算法,包括合并排序和快速排序,并分析它们在链表中的性能。 首先,让我们讨论链表排序算法的挑战。链表的节点分布在内存中,可能会导致缓存未命中的情况,这会严重影响排序算法的性能。为了...

    链表归并的操作,将两个链表合并成一个链表

    这种操作通常出现在诸如合并排序等算法中,其目的是有效地整合两个已经排序的链表,保持合并后的链表依然有序。 在链表归并的过程中,我们首先需要理解链表的基本结构。链表由一系列节点组成,每个节点包含数据和...

    归并排序算法链表实现

    归并排序的链表实现 随机生成实验数据,可以统计算法运行时间

    基于C的简单链表合并2排序程序

    在这个“基于C的简单链表合并2排序程序”中,我们需要处理两个已经排序的链表,a和b,每个链表的节点包含学号(假设为整型)和成绩(也假设为整型)。目标是将这两个链表合并成一个新的链表,并按照学号的升序排列。...

    链表的智能排序与索引算法.pptx

    - **并行算法优化**:研究人员正致力于优化基于链表归并排序的并行算法,以提升多核并行效率。 - **算法融合**:探索将归并排序与其他排序算法(如快速排序或堆排序)相结合的方法,以获得更好的性能表现。 综上所...

    C语言数据结构 链表与归并排序实例详解

    归并排序的核心在于合并两个已排序的链表。合并过程中,我们需要创建一个新的链表,将两个输入链表中的较小元素依次添加。这个过程从两个链表的头节点开始,比较它们的值,并将较小的节点添加到结果链表中。如果一个...

    数据结构链表排序数据结构课设,链表排序,升序,逆序,倒置

    归并排序则采用分治策略,将链表分为两半,分别排序,然后合并,适合大规模数据。 2. 升序排序:在链表中实现升序排序,意味着要按照从小到大的顺序排列元素。可以使用插入排序,遍历链表,每次比较新节点与已排序...

Global site tag (gtag.js) - Google Analytics