1归并排序呢是一种比较复杂的排序算法,其主要体现在拆分与归并中。而排序的基本思想是在归并中排序迭代完成
主要代码如下:
public class MergeRealize {
public static int[] assist;
/*
算法实现
*/
//归并排序算法
public void sortMerge(int[] arr){
assist = new int[arr.length];
int low = 0;
int high = arr.length-1;
splitInteract(arr,low,high);
}
//此方法通过迭代 拆分数组
public static void splitInteract(int[] arr,int low,int high){
if (high <= low){
return;//分成最小
}
int mid = low + (high - low) / 2;
splitInteract(arr,low,mid);
splitInteract(arr,mid+1,high);
//以上是不断切分得过程 知道数组被切分为一个数
//核心就是归并 归并的时候排序
//定义两个指针 分别指向 两个子数组的头结点 比较 将小的放入数组中 顺序为先排号左边的然后排序好右边的
//最后合并为一个数组
mergeInteractor(arr,low,mid,high);
}
public static void mergeInteractor(int[] arr,int low,int mid ,int high) {
int i = low;
int p1 = low;
int p2 = mid+1;
//此时 就需要比较 point1 与 point2 处的值 比较完了之后 将另以数组直接排到后面
while(p1<=mid && p2<=high) {
if (arr[p1]>=arr[p2]) {
assist[i++] = arr[p2++];
}else {
assist[i++] = arr[p1++];
}
}
//上面循环完了之后 肯定会有一个数组剩余的没有排进去 指针走到头了 循环遍历完事OK
while(p1<=mid){
assist[i++] = arr[p1++];
}
while (p2<=high){
assist[i++] = arr[p2++];
}
System.out.println(Arrays.toString(assist));
for(int in = low;in<=high;in++){
arr[in] = assist[in];
}
}
@Test
public void testsortMerge(){
int[] arr = {5,2,7,9,34,2,1,5,7};
sortMerge(arr);
//
}
}
浙公网安备 33010602011771号