归并排序
来源:互联网 发布:手机视频拼接软件 编辑:程序博客网 时间:2024/06/05 11:13
归并排序也是经常用到的排序方式之一了,速度很快,能够达到O(n logn)的级别。
总的来说,归并排序首先通过递归方法将一组数据两两分开,将两个数据按顺序排列好,然后,递归到上一层,将先前排列好的数据,再合并到一个数组里面。依次往上层递归,最终能够达到数组的排序。上一张图,解释归并排序的整个排序流程。此图从互联网得。
从图中可以清晰的看出归并排序的流程。就不做过多解释了,一开始,看到这种思路觉得这种想法很难理解,跟我们平常使用的选择排序啊,冒泡排序啊等等,完全不同。而且,对于递归算法来说,有时候会让我不清楚算法的执行顺序,看完归并排序,不仅使我掌握了一个非常牛逼的算法,而且,我对递归算法的认识也更深刻了。
//归并排序public class Merge {public void MergeSort(int []data,int left,int mid,int right){int third=left;int[] tempArr=new int[data.length];int center=mid+1;int temp=left;while(left<=mid&¢er<=right){if(data[left]<=data[center]){tempArr[third++]=data[left++];}else{tempArr[third++]=data[center++];}}while(left<=mid){tempArr[third++]=data[left++];}while(center<=right){tempArr[third++]=data[center++];}while(temp<=right){data[temp]=tempArr[temp++];}}public int[] sort(int[] data,int left,int right){if(left>=right)return null;int mid=(left+right)/2;sort(data,left,mid);sort(data,mid+1,right);MergeSort(data, left,mid ,right);return data;}public static void main(String[] args) {int [] array=new int[]{2,6,8,1,3,9,4};Merge m=new Merge();int[] newarray=m.sort(array,0,array.length-1);for(int i=0;i<newarray.length;i++){System.out.println(newarray[i]);}}}以上就是完整的代码。可以自行试试。
1 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- JAVASE--04--多态,抽想类,接口
- Tips for 类
- <Fundamentals of Data Structures in C> 1.2 算法描述
- 神经网络训练技巧
- PHP会话控制Session与Cookie
- 归并排序
- 集合类详解
- BZOJ 1042 dp+容斥
- 深入理解Java PriorityQueue
- struts2-showcase项目启动报:Resource 'VM_global_library.vm' not found.
- 联合主键
- MFC绘图之线
- STL中各个容器的实现基本原理以及互相依赖
- 为什么Sphinx查的数据比用SQL查还少?