归并排序
以前一直想实现归并排序,今天终于试验成功,下面是代码部分:
package com.guigu.zhangxx.main;
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame{
/**
* 1、合并算法
* 2、将非减数组a和非减数组b合并成数组c
*/
private static final long serialVersionUID = 1L;
int[] a = {1,2,2,3,4,5};
int[] b = {2,3,4,5,8,8,9};
int[] c = new int[a.length + b.length];
void mergeList(){
int i = 0;
int j = 0;
int k = 0;
while(i<a.length && j<b.length){
if(a[i]<=b[j]){
c[k++] = a[i];
i++;
}
else{
c[k++] = b[j];
j++;
}
}
/**
* 把La剩下的搬回去
*/
if(i == a.length ){
while(j < b.length){
c[k++] = b[j];
j++;
}
}
/**
* 把Lb剩下的搬回去
*/
if(j == b.length ){
while(i < a.length){
c[k++] = a[i++];
}
}
}
void println(){
for(int k=0;k < (a.length+b.length);k++){
System.out.print(c[k]+" ");
}
}
public static void main(String[] args) {
Test test = new Test();
test.mergeList();
test.println();
}
}
结果:
1 2 2 2 3 3 4 4 5 5 8 8 9
说明:
归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。