归并排序

来源:互联网 发布:显卡软件超频 编辑:程序博客网 时间:2024/05/16 06:36
<span style="font-size:18px;">/** * 归并排序 * @author xxxu * */public class GuiBingSort {//额外的数组空间private int[] aux=null;private boolean less(int a,int b){if(a<b){return true;}else{return false;}}public void sort(int[] a){aux=new int[a.length];sort(a,0,a.length-1);}/* * 递归,主要是merge方法 */private void sort(int[] a, int lo,int hi) {if(hi<=lo){return ;}int mid=lo+(hi-lo)/2;//排序前半部分sort(a,lo,mid);//排序后半部分sort(a,mid+1,hi);merge(a,lo,mid,hi);}public void show(int[] a){for (int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}System.out.println();}/* * 数组的前半部分和后半部分都是有序的,才可以像这样比较 */private void merge(int[] a, int lo, int mid, int hi) {int i=lo;int j=mid+1;//复制数组for (int k = lo; k <= hi; k++) {aux[k]=a[k];}for (int k = lo; k <= hi; k++) {//如果i>mid,表示数组的前半部分已经比完了,只有后半部分了if(i>mid){a[k]=aux[j++];}else if(j>hi){  //数组的后边那部分比完了,只有前半部分了a[k]=aux[i++];}else if(less(aux[j],aux[i])){ //如果后半部分的值比前半部分的值小,那么就交换a[k]=aux[j++];}else{a[k]=aux[i++];}}}}</span>


0 0
原创粉丝点击