分治策略

来源:互联网 发布:软件随想录 pdf 编辑:程序博客网 时间:2024/05/17 04:58

合并排序算法——merge

package yrz.unit2;public class Sort {public static int[] merge(int[] a, int p, int r, int q) {System.out.println("传入前:");for(int i1=0;i1<a.length;i1++){System.out.print("  a["+i1+"]:"+a[i1]);}System.out.println();int i = 0;int j = 0;int k = p;//pointint[] rArray = new int[r - p + 1];int[] lArray = new int[q - r];      for (int x = 0; x < rArray.length; x++) {rArray[x] = a[x + p];}for (int y = 0; y < lArray.length; y++) {lArray[y] = a[y + r + 1];}while (i < lArray.length && j < rArray.length) {if (rArray[j] > lArray[i]) {a[k] = lArray[i];               i++;} else {a[k] = rArray[j];j++;}k++;}while (i < lArray.length) {a[k] = lArray[i];//a中被覆盖的元素重新调整到正确的位置上i++;k++;}while (j < rArray.length) {a[k] = rArray[j];//a中被覆盖的元素重新调整到正确的位置上j++;k++;}System.out.println("处理后: ");for(int i1=0;i1<a.length;i1++){System.out.print("  a["+i1+"]:"+a[i1]);}return a;}public static int[] mergeSort(int[] a, int p, int q) {if (p < q) {int r = (p + q) / 2;mergeSort(a, p, r);mergeSort(a, r + 1, q);merge(a, p, r, q);}return a;}public static int[] mergeSort(int[] a) {mergeSort(a, 0, a.length - 1);return a;}public static void main(String[] args) {/*--------------mergeSort1()----------------*/int[] b = { 5, 1, 7, 0, 3, 2, 8, 6};for(int j=0;j<b.length;j++){System.out.print(".."+mergeSort(b)[j]);}}}
a作为参数输入merge方法中不断被递归传递,调整顺序,返回的a即是结果;第一次递归的结束条件是“两个”元素的排序;即每次执行排序的是的状态如下:merge(a,0,0,1)---前两个元素排序;merge(a,2,2,3)---第三个和第四个元素排序....一直到分成两个有序的子数组....
                                   

原创粉丝点击