排序算法THREE:归并排序MergeSort
2024-08-25 01:27:29
/** *归并排序思路:分治法思想 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 ; } } } }
最新文章
- POJ 2823 Sliding Window 线段树区间求和问题
- ASP.NET MVC HtmlHelper之Html.ActionLink
- IT荐书|10个最“牛叉”的代码注释
- memcached学习笔记5--socke操作memcached 缓存系统
- iOS7跳转AppStore地址
- MYBATIS报ORA-01745: 无效的主机/绑定变量名 异常
- OC中的self指针
- Linux Ubuntu 14.04安装LAMP(Apache+MySQL+PHP)网站环境
- pygame_第一个窗口程序
- 如何在自定义组件中使用v-model
- webpack打包样式代码去重
- __http原理__01__通信流程_消息格式
- Vue-devtools安装步骤
- 微信小程序页面跳转,带参数跳转
- c#: WebBrowser控制台输出
- python 简单的server请求
- 解决Run As ->; Java Application不能运行问题
- mybatis学习之路----批量更新数据两种方法效率对比
- 开源3D软件——大集合【转】
- 2018/03/16 echo、print_r、print、var_dump之间的区别