2路归并排序

import java.util.Arrays;

public class Merge_sort {
public static void main(String[] args){
int[] nums={ 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
sort(nums,0,nums.length-1);
System.out.println(Arrays.toString(nums));
}

public static int[] sort(int[] num,int low,int high){
int mid=(low+high)/2;
if(low<high){ 
//左排序
sort(num,low,mid);
//右排序
sort(num,mid+1,high);
Merge(num, low,mid, high);
}
return num;
}

public static void Merge(int[] num,int low,int mid,int high){

int[] temp=new int[high-low+1];
int i=low;
int j=mid+1;
int k=0;
while(i<=mid&&j<=high){
if(num[i]<=num[j]){
temp[k]=num[i];
i++;
}else{
temp[k]=num[j];
j++;
}
k++;
}
while(i<=mid){
temp[k]=num[i];
k++;
i++;
}
while(j<=high){
temp[k]=num[j];
k++;
j++;
}

for(int m=0;m<temp.length;m++){
num[low++]=temp[m];

}
}

}

时间: 2024-12-05 06:11:16

2路归并排序的相关文章

两路归并排序

链表两路归并 #include<iostream> #include<assert.h> using namespace std; struct node { int val; node * next; node(int v) { val=v; next=NULL; } }; node * merge(node* list1 , node * list2) { assert(list1!=NULL&&list2!=NULL);//括号中是希望出现的正确的情况  no

#23 Merge k Sorted Lists (N路归并排序)

#23 Merge k Sorted Lists (N路归并排序) 题目地址:#23 题目分类:链表/归并排序/堆排序 题目难度:hard 题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 翻译:合并K个已经排序的链表,返回一个排序好的链表. 思路 暴力法,我们很容易想到:以一个for循环遍历所有的链表,找出最小的,然后将这个节点加入新的链表

编程算法 - K路归并排序(k-way merge sort) 代码(C++)

K路归并排序(k-way merge sort) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy K路归并排序作为经典的外部排序算法, 是程序员必须要掌握的. 知识概念参考: <数据结构> 主要思想: 在k个已排序的文件中, 选择第一个值, 采用败者树, 更新二叉树结构, 最终选择最优值. 代码仅供参考, 如最小值用(-1)代替, 最大值用(100)代替. /* * main.cpp * * Created on: 2014年9月11日 *

外部排序&amp;多路归并排序

外部排序: 一.定义问题 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序 整个文件的目的.外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序.然后,对已经排 序的子文件进行多路归并排序. 二.处理过程 (1)按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行

“《算法》第4版第2章‘排序’”:归并排序

归并排序(Merge Sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 归并操作(Merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.归并排序算法依赖归并操作.归并排序有多路归并排序.两路归并排序 , 可用于内排序,也可以用于外排序.这里仅对内排序的两路归并方法进行讨论. 归并排序的步骤如下: 1)Divide: 将待排序序列(原问题)分成两个规模大致相等的子序列(子问题

浅谈数据结构-归并排序

归并算法采用分治法,利用二叉树的概念来实现排序算法,建立在递归合并操作的基础上算法.通过将数组分组到两个序列,排序,然后在归并排序,进而实现算法.归并排序算法就是利用归并的思想实现的排序算法. 一.算法思想 数组序列{16, 7, 13, 10, 9, 15, 3, 2, 5, 8, 12, 1, 11, 4, 6, 14},利用一定的交换排序,得到有序的小序列后,进行两两合并排序后再合并,最终获得一个有序的数组.从形状上开像极了一棵倒置的完全二叉树     它的原理是假设初始序列含有n个记录,

基本排序之详解归并排序

归并排序 一.归并排序的效率是仅次于快速排序的稳定的排序算法,其时间复杂度为O(nlog2n).我们对n 个元素进行一次归并排序时,归并的次数约为log2n,每一次的两路归并排序元素的比较次数约为n-1. 二.归并排序的基本思想: 归并排序是通过将一列数组序列中的元素看成一个一个的小序列来进行归并,直到所有的元素都被归并完成后,排序即完成,便是成功的完成了排序操作. 三.原理: 如:我们对n 为9吧,这样更加好,如,a[9] = {1,2,5,4,3,8,6,7,9}这样的一个数组: 原数组:

排序之归并排序

归并排序在外排序和内排序的作用都是非常大的,本人觉得要是要用户外排.在处理大数据排序,当内存大小不足以把所有数据一次载入时,这时就需要归并排序.以下进行的是2路归并排序为主. 数组递归归并 1 void mergeCore(int *src,int * &dest,int i,int m,int n){ 2 int k=0,j=0; 3 int begin=i; 4 for(k=i,j=m+1;k<=m&&j<=n;k++){ 5 if(src[i]<src[j]

C语言归并排序

这篇文章是学习了小甲鱼-数据结构与算法结合自考教材编写出的代码,希望自己逐渐在算法造诣上能更上一层楼. 归并排序(递归实现) “归并”一词在中文含义中就是合并的意思,而在数据结构中的定义是将两个或者两个以上的有序表组合成一个新的有序表,就叫归并. 归并排序(Merge Sort)就是利用归并的思想实现的排序方法.它的原理是假设初始序列有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到⌈n/2⌉个长度为2或1的有序子序列:再两两归并,……,如此重复,直至得到一个长度