数据结构与算法之归并排
Posted self-crossing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法之归并排相关的知识,希望对你有一定的参考价值。
归并排 就是一种分治的思想
将某个问题划分为n个小的同规模算法去解决
public class StudyMergeSort { /** * 归并排思路 : * 将一个数组分割成n个小组 然后每个小组两两比较 */ public static void main(String[] args) { int[] array = ArrayUtil.generateRandomArray(20, 20); ArrayUtil.printArray(array); mergeSort(array); System.out.println(); ArrayUtil.printArray(array); } public static void mergeSort(int[] arr) { process(arr,0,arr.length-1); } public static void process(int[] arr, int L, int R) { if(L == R){ return; } /** 中间数 */ int M = L + ((R - L) >> 1); /** 分裂 */ process(arr,L,M); process(arr,M+1,R); /** 合并 */ merge(arr,L,M,R); } public static void merge(int[] arr, int L, int M, int R){ int i = 0; int p1 = L; int p2 = M + 1; /** 辅助空间 */ int [] help = new int [R - L + 1]; /** 将小的放到辅助空间中 */ while(p1 <= M && p2 <= R){ help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++]; } while(p1 <= M){ help[i++] = arr[p1++]; } while(p2 <= R){ help[i++] = arr[p2++]; } for (int j = 0; j < help.length; j++) { arr[L+j] = help[j]; } } }
以上是关于数据结构与算法之归并排的主要内容,如果未能解决你的问题,请参考以下文章