归并排序(Java)
来源:互联网 发布:双语名著阅读软件 编辑:程序博客网 时间:2024/05/16 10:28
文章参考了博文“白话经典算法”(http://blog.csdn.net/morewindows/article/details/6678165/)。
归并是把两个已排序文件合并成一个更大的已排序文件的过程,而相比之下,选择是把一个文件分成包含k个最小元素和n-k个最大元素两部分的过程。归并排序适用于链表排序。
算法的主体部分如下,通过递归,将原序列分化成子序列:
void MergeSort(int A[], int temp[], int left, int right){int mid;if(right>left){mid = (right+left)/2;MergeSort(A,temp,left,mid);MergeSort(A,temp,mid+1,right);Merge(A,temp,left,mid+1,right);}}
算法的合并部分如下,注意的是left-mid-1和mid-right都是已经排好序的:
void Merge(int[] A, int[] temp, int left, int mid, int right) {// TODO Auto-generated method stubint i, left_end, size, temp_pos;left_end = mid-1;temp_pos = left;size = right-left+1;while( (left<=left_end) && (mid<=right) ){if(A[left] <= A[mid]){temp[temp_pos] = A[left];temp_pos = temp_pos+1;left = left+1;}else{temp[temp_pos] = A[mid];temp_pos = temp_pos + 1;mid = mid + 1;}//else}while(left <= left_end){temp[temp_pos] = A[left];left = left + 1;temp_pos = temp_pos + 1;}while(mid <= right){temp[temp_pos] = A[mid];mid = mid + 1;temp_pos = temp_pos + 1;}for(i=0;i<size;i++){A[right] = temp[right];right = right-1;}}测试代码如下:
public static void main(String[] args) {int[]A = {12,23,34,2,34,66,15};int[] temp = new int[A.length];MergeSort(A,temp,0,A.length-1);for(int i=0;i<A.length;i++)System.out.println(A[i]);}
0 0
- 归并排序(java)
- (Java)归并排序
- 归并排序(java)
- 归并排序(Java)
- 归并排序(JAVA)
- 归并排序(Java) @排序
- 温故而知新-归并排序(JAVA)
- 归并排序(java实现)
- 归并排序(JAVA版)
- 归并排序(java实现)
- Java 归并排序(MergeSort)
- 归并排序(Java描述)
- java 归并排序(稳定)
- 归并排序(Java实现)
- 归并排序实现(Java)
- 归并排序--java(递归)
- 归并排序(java实现)
- Java 归并排序(MergeSort)
- 4/26调APRN过程
- Angular入门
- 架设双站点
- nyoj1278 zzuli1929 Prototypes analyze(河南省acm第九届省赛)
- HDU
- 归并排序(Java)
- PHP MySQL 数据字典生成器
- Linux变量
- 具体的设计模式(二):结构型模式
- hdu 3605 Escape【图论-网络流-最大流-状态压缩】
- 相对定位和绝对定位的练习
- [Binder机制]大管家ServiceManager启动流程
- zoj 3959 Problem Preparation
- 14. Longest Common Prefix