今天第一次看懂了严奶奶的代码( ̄▽ ̄)~*,然后按照厌奶那的思路进行了一波coding,稍加调试后即可跑起来。

学习链接:排序七 归并排序图解排序算法(四)之归并排序


merge函数:将两个有序序列拼接成一个有序序列

     //对[a,b]∈in,[b+1,c]∈in进行排序。
//对in中的数据进行排序之后,输出到out中
//升序
void merge(int in[],int a,int b,int c){
//设置变量i对[a,b]进行遍历,j对[b+1,c]进行遍历,k对out进行遍历
int[] out=new int[in.length];
int i,j,k;
for(i=a,j=b+1,k=a;
i<=b && j<=c;
k++){
if(in[i]<in[j]){//挑选最小的元素放入out中
out[k]=in[i++];//i∈[a,b]中的元素是最小的
}else{
out[k]=in[j++];//j∈[b+1,c]中的元素是最小的
}
}
//遍历完之后,对剩余元素进行处理
int m=0,n=0;
boolean move=false;
if(i<=b){m=i;n=b;move=true;} //i∈[a,b]中的元素没有遍历完
if(j<=c){m=j;n=c;move=true;} //j∈[b+1,c]中的元素没有遍历完
for(i=m;i<=n && move;i++) out[k++]=in[i];
for(i=a;i<=c;i++) in[i]=out[i];//临时数组放回原数组 int t;
t=0;
}

递归函数MSort:

      //递归函数
void MSort(int in[],int a,int b){//将[a,b]的元素进行排序
if(a!=b){
int split=(a+b)/2;
MSort(in,a,split);
MSort(in,split+1,b);
merge(in,a,split,b);//栈底
}
}

归并排序MergeSort:

      MergeSort(int[] nums){
MSort(nums,0,nums.length-1);
sortAns=nums;
}

完整代码:

 public class Main {

     public static void main(String[] args) {
int []nums={2,1,3,0,-1,12,90,23,1};
MergeSort sort=new MergeSort(nums);
System.out.print(sort);
sort.test();
}
} class MergeSort{
int [] sortAns;
public String toString(){
int i;
String str=new String("");
for(i=0;i<sortAns.length;i++) str+=String.valueOf(sortAns[i])+" ";
str+="\n";
return str;
}
//对[a,b]∈in,[b+1,c]∈in进行排序。
//对in中的数据进行排序之后,输出到out中
//升序
void merge(int in[],int a,int b,int c){
//设置变量i对[a,b]进行遍历,j对[b+1,c]进行遍历,k对out进行遍历
int[] out=new int[in.length];
int i,j,k;
for(i=a,j=b+1,k=a;
i<=b && j<=c;
k++){
if(in[i]<in[j]){//挑选最小的元素放入out中
out[k]=in[i++];//i∈[a,b]中的元素是最小的
}else{
out[k]=in[j++];//j∈[b+1,c]中的元素是最小的
}
}
//遍历完之后,对剩余元素进行处理
int m=0,n=0;
boolean move=false;
if(i<=b){m=i;n=b;move=true;} //i∈[a,b]中的元素没有遍历完
if(j<=c){m=j;n=c;move=true;} //j∈[b+1,c]中的元素没有遍历完
for(i=m;i<=n && move;i++) out[k++]=in[i];
for(i=a;i<=c;i++) in[i]=out[i];//临时数组放回原数组 int t;
t=0;
}
//递归函数
void MSort(int in[],int a,int b){//将[a,b]的元素进行排序
if(a!=b){
int split=(a+b)/2;
MSort(in,a,split);
MSort(in,split+1,b);
merge(in,a,split,b);//栈底
}
}
MergeSort(int[] nums){
MSort(nums,0,nums.length-1);
sortAns=nums;
}
MergeSort(){}
}

归并排序 MergeSort的更多相关文章

  1. 排序算法THREE:归并排序MergeSort

    /** *归并排序思路:分治法思想 O(nlogn) * 把数组一分为二,二分为四 * 四和为二,二和为一 * */ /** * 归并排序主方法 *@params 待排序的数组 *@params 初始 ...

  2. 普林斯顿大学算法课 Algorithm Part I Week 3 归并排序 Mergesort

    起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each ha ...

  3. 分治法——归并排序(mergesort)

    首先上代码. #include <iostream> using namespace std; int arr[11]; /*两个序列合并成一个序列.一共三个序列,所以用 3 根指针来处理 ...

  4. [图解算法] 归并排序MergeSort——<递归与分治策略>

    #include"iostream.h" void Merge(int c[],int d[],int l,int m,int r){ ,k=l; while((i<=m)& ...

  5. 《算法导论》归并排序----merge-sort

    伪代码请见<算法导论>2.3节 merge-sort实现: public class MergeSort {        public static void sort(double [ ...

  6. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-006归并排序(Mergesort)

    一. 1.特点 (1)merge-sort : to sort an array, divide it into two halves, sort the two halves (recursivel ...

  7. C#数据结构与算法系列(二十三):归并排序算法(MergeSort)

    1.介绍 归并排序(MergeSort)是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得 ...

  8. 排序算法——QuickSort、MergeSort、HeapSort(C++实现)

    快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...

  9. POJ2299 Ultra-QuickSort(归并排序求逆序数)

    归并排序求逆序数   Time Limit:7000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u   Descri ...

随机推荐

  1. Linux内核中的并发与竞态概述

    1.前言 众所周知,Linux系统是一个多任务的操作系统,当多个任务同时访问同一片内存区域的时候,这些任务可能会相互覆盖内存中数据,从而造成内存中的数据混乱,问题严重的话,还可能会导致系统崩溃. 2. ...

  2. Android系统HAL基本概念

    1.前言 Android系统硬件抽象层(Hardware Abstraction Layer),简写为HAL,是连接Android Framework与Linux内核设备驱动的重要桥梁.HAL存在的意 ...

  3. 容斥原理--计算错排的方案数 UVA 10497

    错排问题是一种特殊的排列问题. 模型:把n个元素依次标上1,2,3.......n,求每一个元素都不在自己位置的排列数. 运用容斥原理,我们有两种解决方法: 1. 总的排列方法有A(n,n),即n!, ...

  4. [转帖]Select count(*)和Count(1)的区别和执行方式

    Select count(*)和Count(1)的区别和执行方式 https://www.cnblogs.com/VicLiu/p/11672303.html 在SQL Server中Count(*) ...

  5. 02、策略模式(Strategy)

    一.概念: 策略是为达到某一目的而采取的手段或方法,策略模式的本质是目标与手段的分离, 手段不同而最终达成的目标一致.客户只关心目标而不在意具体的实现方法, 实现方法要根据具体的环境因素而变化. 二. ...

  6. 9、VUE过渡和动画

    1.过渡效果 Vue提供了transition的封装组件,在下列情形中,可以给任何元素和组件添加entering/leaving过渡. 我们注意到,<transition>标签的标记是 n ...

  7. 2019 学霸君java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.学霸君等公司offer,岗位是Java后端开发,因为发展原因最终选择去了学霸君,入职一年时间了,也成为了面试官 ...

  8. 搞Jedis案例出现问题,有大佬帮我看看怎么解决吗?先感谢大佬点进来看了---Day31

    今天学了Jedis的相关内容,然后做了一个案例,但是出现了错误,然后我百度了一晚上没有解决,想到看看发个博客能不能有大佬帮我看一下问题出现在哪里,百度了一晚上有点懵逼.求大佬帮我解决,在这小弟我先万分 ...

  9. React路由安装使用和多种方式传参

    安装路由 npm i react-router-dom -S 引入路由 import { BowserRouter as Router, Route, Switch, ... } from " ...

  10. 如何设计提高服务API的安全性(二)API密钥方式详解

    在上文已经讲述了基础介绍,这篇文章详细讲解API密钥方式. 利用何种加密方式呢? 经过上面加密算法的理解,单向加密不仅性能高,而且有压缩性,即长度一致,有效减少网络传输过程中的字节大小.适合我们这种调 ...