MergeSort 归并排序
排序思想:1,分解待排序的n个元素为两个子列,各为n/2个元素
2,若子列没有排好序,重复1步骤,每个子列继续分解为两个子列,直至被分解的子列个数为1
3,子列元素个数为1,说明这个子列已经排好序,开始逐级合并子序列进行排序 该算法需要合并分解的子序列,所以需要额外一个辅助过程Merge(A,p,q,r)来完成两个子列的合并,A为数组,p,q,r为数组下标,其中A[p,q]和A[q+1,r]为两个已经排好序的子序列,∞代表哨兵值。
Merge伪代码:
Merge(A,p,q,r)
n1 = q - p + 1
n2 = r - q
let L[1..n1+1] and R[1..n2+1] be new arrays
for i = 1 to n1
L[i] = A[p+i-1]
for j = 1 to n2
R[j] = a[q+j]
L[n1+1] = ∞
R[n2+1] = ∞
i = 1
j = 1
for k = p to r
if L[i] <=R[j]
A[k] = L[i]
i = i + 1
else
A[k] = R[j]
j = j + 1 MergeSort(归并排序)伪代码:
MergeSort(A,p,r)
if p < r
q = (p+r)/2
MergeSort(A,p,q)
MergeSort(A,q+1,r)
Merge(A,p,q,r)
public class MergeSort{
public static void main(String[] args) {
int A[] = {
1,6,4,5,2,9,7,23,56,43,98,56
};
int[] temp = new int[A.length];
MergeSort(A,temp,0,A.length-1);
for (int i:A){
System.out.print(i+" ");
}
} public static void MergeSort(int[] A,int[] temp,int start,int end){
if (start<end){
int mid = (start+end)/2;
//把数组分解为两个子列
MergeSort(A,temp,start,mid);
MergeSort(A,temp,mid+1,end);
//逐级合并两个子列
Merge(A,temp,start,mid,end);
}
} public static void Merge(int[] A,int[] temp,int start,int mid,int end){
int i = start;
int j = mid+1;
int k = 0;
while(i<=mid&&j<=end){
if (A[i]<=A[j]) {
temp[k] = A[i];
i++;
k++;
}else {
temp[k] = A[j];
j++;
k++;
}
}
while(i<=mid){
temp[k] = A[i];
k++;
i++;
}
while(j <= end){
temp[k] = A[j];
k++;
j++;
}
for (int m = 0; m<k; m++) {
A[start+m] = temp[m];
}
}
}

  

最新文章

  1. java IO之AutoCloseable,Closeable和Flushable接口
  2. js学习笔记7----return,arguments及获取元素样式
  3. KindEditor图片上传到七牛云
  4. 关于 mkimage
  5. 如何判断C#的Finalizer线程有没有被阻塞
  6. Python3.5创建虚拟环境
  7. C#基础面试
  8. 使用GraceNote Web API发展Mac发现音乐信息的应用
  9. 性能测试分享:Jmeter多机协作原理
  10. ASP.NET Core 共享第三方依赖库部署的Bug(*.deps.json on 2.2.0 or 4.6.0 版本)
  11. Android之人脸识别
  12. linux统计使用最多的10个命令
  13. 基于MVC 的Quartz.Net组件实现的定时执行任务调度
  14. tomcat生成调试日志配置
  15. redis 高级特性 不要太好用
  16. android 点击数字跳转到电话界面
  17. np.random.randn()、np.random.rand()、np.random.randint()
  18. STM32F103 ucLinux内核没有完全启动
  19. Java,vue.js,jsp for循环的写法
  20. SPOJ4717——Grid Points in a Triangle

热门文章

  1. 跟我一起阅读Java源代码之HashMap(一)
  2. OSSpinLockLock加锁机制,保证线程安全并且性能高
  3. 20165318 2017-2018-2 《Java程序设计》第八周学习总结
  4. 20165318 预备作业3 Linux安装及学习
  5. 1260. [CQOI2007]涂色【区间DP】
  6. 3942: [Usaco2015 Feb]Censoring
  7. Kubernetes中的资源调度与资源管理
  8. Alpha冲刺(5/10)——追光的人
  9. 20155314 2016-2017-2 《Java程序设计》第1周学习总结
  10. Mac app打包成dmg