二路归并排序:将两个按值有序序列合并成一个按值有序序列
排序基本思想是:
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
设定两个指针,最初位置分别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
public class TwoWayMergeSort { /** * 二路归并排序 * @param data1 * @param data2 * @return */ public static int[] two_way_mergeSort(int[] data1, int[] data2) { int[] temp = new int[data1.length + data2.length]; int i = 0, j = 0, iter = 0; for (; i < data1.length && j < data2.length;) { if (data1[i] <= data2[j]) { temp[iter] = data1[i]; iter++; i++; } else { temp[iter] = data2[j]; iter++; j++; } } for (; i < data1.length; i++, iter++) { temp[iter] = data1[i]; } for (; j < data2.length; j++, iter++) { temp[iter] = data2[j]; } return temp; } public static void main(String[] args) { int[] v1 = { 1, 2, 4, 8}; int[] v2 = {3, 5, 6,7 }; int[] v = TwoWayMergeSort.two_way_mergeSort(v1, v2); for (int key : v) { System.out.format(" %d", key); } } }
相关推荐
C语言二路归并排序算法, 写了个二路归并的归并排序小代码,直接贴上来
直接插入排序 冒泡排序 快速排序 直接选择排序 堆排序 二路归并排序 C#源代码 使用C#实现的数据结构中的排序算法
以单链表为存储结构, 实现二路归并排序的算法, 要求链表不另外占用存储空间, 排序过程中不移动结点中的元素, 只改各链结点中的指针
递归实现的二路归并排序算法,其中对结构体按其内部一个关键字(本例是对一个任务结构体,按其收益排序)进行排序
/*.编写完整的二路归并排序程序。*/ /*.编写完整的二路归并排序程序。*/
二路归并算法 排序 归并排序
直接插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、二路归并排序的C++语言实现,亲测可行,二路归并排序未得到预期结果,望指正。
C语言二路归并排序算法.rtf
归并排序相信大家都是用递归做的,本排序没有使用任何递归。
二路归并和多路归并排序PPT数据结构课件
主要介绍了java二路归并排序示例,需要的朋友可以参考下
C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序C语言算法之归并排序
插入排序、冒泡排序、归并排序、快速排序四种排序方式的C++实现,各写成了一个函数,主函数中可以选择调用那一个。初始化数组时用的是随机种子srand((int)time(0))。在宏中定义数组大小。
归并排序法.pdf 二路归并和多路归并的基本思路和简单应用
根据实验要求和伪码信息,设计二分归并排序算法,用二分归并排序算法对给定一个长度为n的随机数组A进行排序,使得最后的输出数组为原来数组内元素的递增顺序排列。
排序-6-二路归并.cpp
二路归并排序 基本思想 二路归并排序就是将两个有序子表归并成一个有序表。首先我们得有一个算法用于归并:两个有序表放在同一数组的相邻位置上,arr[left]到arr[center-1]为第一个有序表,arr[center]到arr[right]...
二路归并排序 数据输入为存储数据的数组data[MAX]。同时设置数据接受数组B[MAX]。 对于数组中两段,分别标记其首元素下表为h,j,设数据接受数组B[MAX]的下标为i。 分别读取data[h],data[j]进行比较,将其中较小者...
数据结构:快速排序、堆排序、归并排序、希尔排序 c++实现