博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合并排序
阅读量:6998 次
发布时间:2019-06-27

本文共 1278 字,大约阅读时间需要 4 分钟。

合并排序算法是用分治策略实现对N个元素进行排序的算法。其基本思想是:

将待排序元素分成大小大致相同 的两个子集合,分别 对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。

重点:

1.分治的实现 

2.合并的实现 

分治,就是把整个集合的元素一直除2化分,一直化为到没有两个元素开始合并。

图:

分治的时候比较简单,一直除2递归就行了,合并的时候为了方便就借助另一个变化的数组来接收交换的数组,

合并的时候,两个指标i、j,把值比较小的放入temp数组中,然后放入那个值的那一边的指标自加,继续比较。一直把值合部排完合并为一个数组,然后把temp数组复制回到原来数组就可以进入下一个递归。

完全代码由下:

package myAlgorithms;

public class myMergeSort {

public void mergeSort(int arr[],int low,int high) {
if(low<high){
int mid = (low+high)/2;
mergeSort(arr, low, mid);
mergeSort(arr, mid+1, high);
Merge(arr,low,mid,high);
snp(arr);
}
}
private void Merge(int[] arr, int low, int mid, int high) {
int length = high-low+1;
int temp[] = new int[length];
int i = low;
int j = mid+1;
int c = 0;
while(i<=mid && j<=high){
if(arr[i]<arr[j]){
temp[c] = arr[i];
c++;
i++;
}
else{
temp[c] = arr[j];
c++;
j++;
}
}
while(i<=mid){
temp[c++] = arr[i];
i++;
}
while(j<=high){
temp[c++] = arr[j];
j++;
}
c = 0;
for(int t=low;t<=high;t++,c++){
arr[t]=temp[c];
}
}
public void snp(int[] arrays){
for(int i=0;i<arrays.length;i++){
System.out.print(arrays[i]+" ");
}
System.out.println();
}
public static void main(String[] args){
myMergeSort mg = new myMergeSort();
int[] arr = {3,2,4,1,5,6,8};
mg.mergeSort(arr, 0,arr.length-1);
}
}

 

转载于:https://www.cnblogs.com/yijiesuifeng/p/3774374.html

你可能感兴趣的文章