算法(第四版)——05归并排序

来源:互联网 发布:淘宝购物怎么货到付款 编辑:程序博客网 时间:2024/06/06 03:15
public class Merge { public static void main(String[] args) {int a[] = {4,56,678,12,34,99,32,10,37,77};System.out.print("排序前的顺序是:");for (int i : a) {System.out.print(i + " ");}System.out.println();sort(a);//调用函数,进行排序System.out.print("排序后的顺序是:");for (int i : a) {System.out.print(i + " ");}}private static void sort(int[] a) {// TODO Auto-generated method stubsort(a,0,a.length-1);}private static void sort(int[] a, int lo, int hi) {// 递归函数,个人觉得这里的理解最困难,以后想通了补充理解.int mid = lo + (hi-lo)/2;if(lo<hi){sort(a,lo,mid);sort(a,mid+1,hi);merge(a,lo,mid,hi);}}private static void merge(int[] a, int lo, int mid, int hi) {// TODO Auto-generated method stubint[] temp = new int[hi-lo+1];//建立一个和a长度相同的数组int i = lo;//标记左半个数组的指针int j = mid + 1;//标记右半个数组的指针int k = 0;//数组temp的指针//下方的while循环可以把两个数组中较小的值赋给temp,每次赋值之后指针要移动while(i <= mid && j <= hi) {if(a[i]<a[j]) {temp[k++] = a[i++];} else {temp[k++] = a[j++];}}//下方两个while循环的作用是把剩下未赋值的继续赋值while (i <= mid) {temp[k++]  = a[i++];}while(j <= hi) {temp[k++] = a[j++];}//temp的值赋给afor (int k2 = 0; k2 < temp.length; k2++) {a[k2+lo] = temp[k2];}}}
算法第四版的代码没有运行出来。。。也看不出来书上的错误,第二遍看书的时候再考虑一下
0 0