归并排序
2015-10-14 23:02
489 查看
一.基本思想
归并(Merge)排序法是将待排序序列分为若干个子序列,对每个子序列进行排序,然后再把有序子序列合并为整体有序序列。二.归并排序示例
三.归并排序的Java实现
/** * 归并排序 * @param array */ public static void mergeSort(int[] array){ sort(array,0,array.length-1); } /** * 排序 * @param array * @param left * @param right */ public static void sort(int[] array, int left, int right){ if(left >= right){ return; //递归出口 } //分割 int mid = (left+right)/2; sort(array,left,mid); sort(array,mid+1,right); //合并 merge(array,left,mid,right); printArray(array); } /** * 合并 * @param array * @param left * @param mid * @param right */ public static void merge(int[] array, int left, int mid, int right){ int[] tempArr = new int[array.length]; //临时数组,存储排序好的数组 int index=left;//临时数组的下标 int center = mid+1;//右边第一个元素的下标 int first = left;//缓存数组第一个元素的下标 while(left<=mid && center<=right){ if(array[left] < array[center]){ tempArr[index++] = array[left++]; }else{ tempArr[index++] = array[center++]; } } //将剩余的部分放入数组,下面的两个while只有执行其中一个 while(left<=mid){ tempArr[index++] = array[left++]; } while(center<=right){ tempArr[index++] = array[center++]; } // //将临时数组的内容拷贝到需要排序的数组中 while(first<=right){ array[first] = tempArr[first++]; } }
四.效率
O(nlgn)五.应用场景
适用与外部排序。外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统