排序算法THREE:归并排序MergeSort
/**
*归并排序思路:分治法思想 O(nlogn)
* 把数组一分为二,二分为四
* 四和为二,二和为一
*
*/
/**
* 归并排序主方法
*@params 待排序的数组
*@params 初始位置
*@params 最终位置
*/
public class MergeSort
{
public static void mergeSort(int[] resouceArr, int begin , int end )
{
if ( begin < end )
{
int middle = ( begin + end ) / 2 ;
mergeSort( resouceArr , begin , middle );
mergeSort( resouceArr , middle + 1 , end );
_merge( resouceArr , begin , middle , end );
}
}
/**
*合并两个已经排好序数组的方法
*由mergeSort()调用,定义为private,命名以下划线开头
*/
private static void _merge(int[] arr , int begin , int middle , int end )
{
//获得左数组大小,右数组大小
int leftArrLength = middle - begin + 1 ;
int rightArrLength = end - middle ;
//申请空间
int[] leftArr = new int[leftArrLength + 1];
int[] rightArr = new int[rightArrLength + 1];
//初始化数组的值(把原数组的值一个一个复制quickArr到新数组中)
for( int i = 0 ; i < leftArrLength ; i++)
{
leftArr[i] = arr[begin + i] ;
}
for( int j = 0 ; j < rightArrLength ; j++)
{
rightArr[j] = arr[middle + j + 1] ;
}
//哨兵,放在最后
leftArr[leftArrLength] = 65536 ;
rightArr[rightArrLength] = 65536 ;
int i = 0 ;
int j = 0 ;
for(int k = begin ; k <= end ; k++ )
{
if( leftArr[i] <= rightArr[j] )
{
arr[k] = leftArr[i] ;
i = i + 1 ;
}
else
{
arr[k] = rightArr[j];
j = j + 1 ;
}
}
}
}
排序算法THREE:归并排序MergeSort的更多相关文章
- Java常见排序算法之归并排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 排序算法之归并排序(Mergesort)解析
转自:http://www.cnblogs.com/ayqy/p/4050452.html 一.归并排序的优缺点(pros and cons) 耗费心思来理解它,总要有个理由吧: 归并排序的效率达 ...
- 【排序算法】归并排序算法 Java实现
归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 基本思想 可以将一组数组分成A,B两组 依次类推,当分出来的小组只有一 ...
- 【DS】排序算法之归并排序(Merge Sort)
一.算法思想 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法的一个非常典型的应用,指的是将两个已经排序的序列合并成一个序列的操作.其归并思想如下: 1)申请空间,使其大小为两个已经 ...
- 我的Java开发学习之旅------>Java经典排序算法之归并排序
一.归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列 ...
- 我的Java开发学习之旅------>Java经典排序算法之归并排序
一.归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是採用分治法(Divide and Conquer)的一个很典型的应用.将已有序的子序列合并,得到全然有序的序列.即先使每一个子序列 ...
- 排序算法——QuickSort、MergeSort、HeapSort(C++实现)
快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...
- C++编程练习(15)----“排序算法 之 归并排序“
归并排序 归并排序(Merging Sort)的原理: 假设初始序列含有 n 个记录,则可以看成是 n 个有序的子序列,每个子序列的长度为1,然后两两归并,得到 [n/2] ([ x ] 表示不小于 ...
- 数据结构与算法之PHP排序算法(归并排序)
一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...
随机推荐
- VS项目如何运用svn的忽略列表
在实际的项目开发中,有些文件(比如bin,obj下的文件)是不需要放在svn里面的,因为每次都会重新生成. 该如何排除这些文件那? 我试着在svn server上删除了这些文件夹,但是在文件夹上还是显 ...
- Mac Pro更换SSD后,在Win7下启用ACHI的方法AHCI
在Mac Pro下更换SSD后,如果安装Win7,要将SSD改为AHCI模式是非常麻烦的.本文介绍如何将Mac的Win7下的SSD改为AHCI方式驱动,及几种常见问题的处理. 一.当Lion与Win7 ...
- IDispatch接口介绍
1. C程序调用时,调用者必须预先知道接口规范(如,参数类型.参数字节长度.参数顺序等).由于不同语言这些规范有所不同,COM未解决不同语言之间调用,提供了IDispatch接口. 2 ...
- tcp_tw_recycle和tcp_timestamps的文章汇总
临近年关,人会变得浮躁,期间写的代码可谓乱七八糟.不过出来混始终是要还的,这不最近就发现一个PHP脚本时常连不上服务器. 遇到这类问题,我习惯于先用strace命令跟踪了一下看看: shell ...
- Linux PAM&&PAM后门
Linux PAM&&PAM后门 我是壮丁 · 2014/03/24 11:08 0x00 PAM简介 PAM (Pluggable Authentication Modules )是 ...
- java_jdbc_反射
package cn.itcast.Reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; imp ...
- C# 工厂模式示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 工厂模式 ...
- Spring-boot访问MongoDB
1.访问配置信息 package hello; import org.springframework.context.annotation.Bean; import org.springframewo ...
- Hibernate学习笔记--------1.单表操作
一.hibernate基本开发步骤 1.引入包,官网下载的包,目录\lib\required下的jar都加进去,这里使用的是 hibernate-release-5.2.1.Final 2.编写配置文 ...
- FastDFS配置过程
在我的生产环境中利用FastDFS实现动静分离的方案