package divideConquer;
import java.util.Arrays;
/*
* 合并排序主要是在于合并
* 将两个已经有序的序列全成一个有序序列
* 数组的区间为:[) 即从0开始
* */
public class MergeSort {
public static void merge(int a[],int low,int high)
{
int mid = (low+high)/2;
int data[] = new int[high-low];
int i = low,j = mid,k = 0;
while(i<mid&&j<high)
{
if(a[i]<a[j])
data[k++] = a[i++];
else
data[k++] = a[j++];
}
while(i<mid) {
data[k++] = a[i++];
}
while(j<high)
data[k++] = a[j++];
for(i =0;i<data.length;i++)// 将产生的中间数组里的值进行对原数组进行赋值
a[i+low] = data[i];//data 从0开始,而 a 从 low 开始
}
public static void mergeSort(int data[],int low,int high)
{
if(low+1>=high)// 因为从0 开始,所以递归的结束条件为low+1>=high
return;
int mid = (low+high)/2;
mergeSort(data,low,mid);
mergeSort(data,mid,high);
merge(data,low,high);
}
public static void main(String args[])
{
int data [] = {5,2,8,1,7 ,2 ,8 ,5,2,5,2,5};
//merge(data,2,4);
mergeSort(data, 0, 12);
System.out.println(Arrays.toString(data));
}
}
分治--合并排序
最新推荐文章于 2022-02-26 10:51:30 发布