思路
1.将序列中待排序数字分为若干组,每个数字为一组
2.将若干组两两合并,保证合并后的组是有序的
3.重复第二步的操作直到只剩下一组,排序完成
先写一个合并的方法
## //合并的方法
public static void merge(int []arr,int l,int m,int r ){
int left_size=m-l;
int right_size=r-m+1;
int left[]=new int[left_size];
int right[]=new int[right_size];
int i,j,k;
for ( i = l; i < m; i++) {
left[i-l]=arr[i];
}
for ( j = m; j <=r ; j++) {
right[j-m]=arr[j];
}
i=0;j=0;k=l;//i指左边的下标索引,j指右边的下标索引,k指arr的那个下标
while(i<left_size&&j<right_size){
if (left[i]<right[j]){
arr[k]=left[i];
i++;
k++;
}
else{
arr[k]=right[j];
j++;
k++;
}
}
while (i<left_size){
arr[k]=left[i];
i++;
k++;
}
while (j<right_size){
arr[k]=right[j];
j++;
k++;
}
}
再写一个分治的方法
//分治
public static void mergeSort(int arr[],int l,int r){
if (l==r){
return;
}else{
int m=(l+r)/2;
mergeSort(arr,l,m);
mergeSort(arr,m+1,r);
merge(arr,l,m+1,r);
}
}
最后测试
public static void main(String[] args) {
int arr[]={2,1,4,5,6,7,4,0};
mergeSort(arr,0,7);
System.out.println(Arrays.toString(arr));
}
结果如下

本文详细阐述了分治法在排序算法中的应用,通过逐步分解和合并操作,讲解了如何用Java实现归并排序的过程。从将数组拆分成有序子序列,到递归地合并子序列,直至整个序列有序。通过实例展示了合并方法和整体分治策略,并测试了排序效果。
1530

被折叠的 条评论
为什么被折叠?



