排序算法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 ...
随机推荐
- -join 和 -split 用法
具体可参考 PowerShell_ISE的帮助文件: -Join(一元联接运算符): 一元联接运算符 (-join <string[]>) 的优先级高于逗号.因此,如果向一元联接运算符提交 ...
- New Features in C# 3.0, 4.0 and 5.0 (英文差的免入)
What’s New in C# 3.0 Language Integrated Query(LINQ) - LINQ enables queries to be written in C# pr ...
- Codeforces Round #321 (Div. 2) A. Kefa and First Steps 水题
A. Kefa and First Steps Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/58 ...
- OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,<Type>),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵, ...
- NET中間語言(IL) 图解
转载地址是:http://msdn.microsoft.com/zh-tw/library/dd229210.aspx 想查看IL指令,请看中英文对照表: CN-http://www.cnblogs. ...
- iOS利用代理实现界面跳转
引入代理类头文件和要跳转到的界面头文件 -(void)aaa { //可以插入动画 LYXViewControllor * view = [LYXViewControllor new]; LYXDel ...
- Overview & Change Log
Overview & Change Log Nova Framework is a PHP 5.5+ MVC Framework. It's designed to be lightweigh ...
- xsl输出html代码 非闭合
``` </div> <div class="row-fluid"> ···
- Gvim使用心得--设置篇[转]
1.设置自己喜欢的字体? 点“编辑”--“选择字体”, 然后在字体列表中选择一个你喜欢的字体和字号,然后确认. 如果想每次都使用这个这个字体 需要加到启动文件中 比如我的 set guifont=Co ...
- ADO和ADO.NET有什么不同?
1.一些ADO中常见的类型比如RecordSet在ADO.NET中已经没有了,而且在ADO.NET中也新增了许多在传统ADO中找不到的直接对应的新类型(如数据适配器): 2.传统的ADO主要针对紧密连 ...