归并排序
来源:互联网 发布:百度输入法linux版 编辑:程序博客网 时间:2024/06/10 10:53
一.基本思想
归并(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)
五.应用场景
适用与外部排序。
外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
1 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 流程控制语言、、循环控制语言
- python网络编程实例简析
- français journal - 2015/10/13
- Leetcode97: Spiral Matrix II
- ARM裸机开发(十一) MMU
- 归并排序
- eclipse 中Logcat 的error ->mail server 如何解决
- lintcode-装最多水的容器-383
- c++ primer第五版(中文)习题答案 第十章第四节第三小节-反向迭代器
- java中网络socket编程简单例子,用于读写字符
- 剑指offer第十一题【二进制中1的个数】c++实现
- 地图定位异常问题
- C++文件(夹)选择对话框
- 流程控制