归并排序 MergeSort
今天第一次看懂了严奶奶的代码( ̄▽ ̄)~*,然后按照厌奶那的思路进行了一波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的更多相关文章
- 排序算法THREE:归并排序MergeSort
/** *归并排序思路:分治法思想 O(nlogn) * 把数组一分为二,二分为四 * 四和为二,二和为一 * */ /** * 归并排序主方法 *@params 待排序的数组 *@params 初始 ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 归并排序 Mergesort
起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each ha ...
- 分治法——归并排序(mergesort)
首先上代码. #include <iostream> using namespace std; int arr[11]; /*两个序列合并成一个序列.一共三个序列,所以用 3 根指针来处理 ...
- [图解算法] 归并排序MergeSort——<递归与分治策略>
#include"iostream.h" void Merge(int c[],int d[],int l,int m,int r){ ,k=l; while((i<=m)& ...
- 《算法导论》归并排序----merge-sort
伪代码请见<算法导论>2.3节 merge-sort实现: public class MergeSort { public static void sort(double [ ...
- 算法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 ...
- C#数据结构与算法系列(二十三):归并排序算法(MergeSort)
1.介绍 归并排序(MergeSort)是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分(divide)成一些小的问题然后递归求解, 而治(conquer)的阶段则将分的阶段得 ...
- 排序算法——QuickSort、MergeSort、HeapSort(C++实现)
快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...
- POJ2299 Ultra-QuickSort(归并排序求逆序数)
归并排序求逆序数 Time Limit:7000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Descri ...
随机推荐
- python笔记 利用python 自动生成条形码 二维码
1. ean13标准条形码 from pystrich.ean13 import EAN13Encoder encode = EAN13Encoder(') encode.save('d:/barco ...
- 基础知识---委托和 lambda
委托定义类型,类型指定特定方法签名. 可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数本身传递给另一方法再进行调用. 以下示例演示了委托的用法. ...
- Java中转换为二进制的几种实现
public class HexUtil { private static final String[] DIGITS_UPPER = {"0", "1", & ...
- 第一次有人把 5G 讲的这么简单明了
一个简单且神奇的公式 今天的故事,从一个公式开始讲起.这是一个既简单又神奇的公式.说它简单,是因为它一共只有 3 个字母.而说它神奇,是因为这个公式蕴含了博大精深的通信技术奥秘,这个星球上有无数 ...
- 关于多个版本的jquery冲突的问题
关于多个版本的jquery冲突的问题 先加载新的版本jquery 然后使用no confi代码,直接上代码看效果 <script src="https://libs.baidu.com ...
- C# 通过反射获取winform上的控件
比如获取Button按钮: System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.B ...
- web安全常用工具
简单工具:明小子,阿d注入工具,namp,穿山甲,御剑,旁注 漏洞扫描工具:appscan .awvs.nbsi 端口扫描工具:nessus.namp.天镜脆弱性扫描与管理系统 数据库备份工具:中国菜 ...
- 给easyui datebox扩展一个清空按钮,无侵入
/** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; (function ($) { var buttons = $.ext ...
- Spring入门。
程序的耦合和解耦. 1.问题引入. 在使用jdbc和数据库交互时.注册驱动:DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());如 ...
- "轻"量级 Java Web 服务框架漫谈
博文太长了, 还是先说下概要: 框架"轻量"与否可以从两方面来看待: 1) 框架本身的体量 - 例如小 jar 无依赖的苗条框架; 2) 用户使用框架是否获得各种便利而无阻隔(&q ...