今天第一次看懂了严奶奶的代码( ̄▽ ̄)~*,然后按照厌奶那的思路进行了一波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. 【idea】【mysql】idea连接mysql

  2. 前端学习:CSS的学习总结(图解)

    前端学习:CSS的学习总结(图解) CSS代码笔记 CSS简介 css的引入方式和书写规范 CSS选择器 CSS属性 CSS盒子模型 CSS的定位

  3. 【linux】CentOS 6 使用cron定时任务,报错:Redirecting to /bin/systemctl restart crond.service

    在centos7上,执行cron定时任务的相关命令,反馈如下: 定时任务执行,反馈是: Redirecting to /bin/systemctl restart crond.service 原因: ...

  4. 【Hyper-V】尝试启动选定的虚拟机时出错 32788

    错误描述 遇到问题如往常一般搜索了一番(好久没搜索问题了)忽然发现,现在百度文章质量较前几年差太多...怪不得那么多人转搜狗搜索(搜微信文章) PS:有些说是目录权限问题,有些是说虚拟磁盘删了重新加载 ...

  5. 记WinForm中WebBrowser相关的俩个问题

    问题一:如何不让WebBrowser中弹出“安全警告” 当链接https网址时,IE会自动弹出上图中的窗口. 关闭窗口的具体思路如下: 使用WebBrowser加载中/加载完毕后触发的事件处理程序,在 ...

  6. 小程序动态设置style,使用内部数据

  7. vue+element表单校验功能

    要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能:   实现这个功能,总共分 ...

  8. Qt选择文件路径

    QString file_path = QFileDialog::getExistingDirectory(this, "请选择文件路径...", "./"); ...

  9. SAP CRM Product Interlinkage - Customer Product ID的一个例子

    For detail technical introduction about relationship, please refer to this wiki. The relationship tr ...

  10. FPM十一:点击POPUP显示明细

    沿接着前面的Search和List.在LIST中点击一列,弹出窗口显示明细. 1.list中定义事件: METHOD if_fpm_guibb_list~get_definition. DATA:gt ...