归并排序的基本思想是将待排的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将它们合并成一个序列。
合并两个子序列的过程称为两路归并。
1.排序过程
2.代码实现
public class Test {
//归并两个子序列
public void merge(int a[], int b[], int left, int mid, int right)
{
for(int i=left; i<=right; i++)
b[i]=a[i];
int s1=left; //左子序列s1...mid 右子序列s2...right
int s2=mid+1;
int k=left; //新序列第一个元素索引
while(s1<=mid && s2<=right) //两个子序列都未检测完,两两比较
{
if(b[s1]<=b[s2])
a[k++]=b[s1++];
else
a[k++]=b[s2++];
}
while(s1<=mid) //若左子序列未检测完,复制其余
a[k++]=b[s1++];
while(s2<=right) //若右子序列未检测完,复制其余
a[k++]=b[s2++];
}
public void mergeSort(int a[], int b[], int left, int right)
{
if(left<right)
{
int mid=(left+right)/2;
mergeSort(a, b, left, mid);
mergeSort(a, b,mid+1, right);
merge(a, b, left, mid, right);
}
}
public static void main(String[] args)
{
int[] a={ -24, 689, 2, 8, 99, 76, 33, 51, 16, 234 };
int[] b=new int[a.length];
Test test=new Test();
test.mergeSort(a,b,0,a.length-1);
System.out.print("排序后: ");
for(int i=0; i<a.length; i++)
System.out.print(a[i]+" ");
System.out.println();
}
}
运行结果:
归并排序主要要掌握的是合并子序列的过程,把这个弄懂了就简单了。好了, 排序算法告一段落了,还剩下其余几种排序,只是不太常用,所以没有一一列举。加油!(凡星逝水2018)