归并排序

来源:互联网 发布:淘宝客招募平台 编辑:程序博客网 时间:2024/06/07 14:40

归并排序:就是把数组拆分,把拆分后的数组进行排序,然后在合并。图如下所示:


代码实现如下:

package guibing;import java.util.Arrays; public class MergeSortDemo {private int [] arr;public MergeSortDemo(int[] arr){this.arr=arr;}/** * @param arr 要排序的数组 * @param low 排序数组的起始下标 * @param hight 排序数组的结束位置 * @return 返回排序后的数组*/public int[] sort(int[] arr,int low,int hight){int mid=(low+hight)/2;//取中间的位置if(low<hight){//如果小的小标比大的下标小,则说明数组还要拆分sort(arr,low,mid);//给左边的进行拆分,在排序sort(arr,mid+1,hight);//给右边的拆分,在排序mergeSort(arr,low,mid,hight);// 合并}return arr;}/** * @param arr 要排序的数组 * @param low 合并的下界 * @param hight 合并的上届 * */private void mergeSort(int[] arr, int low, int mid, int hight) {int i=low;int j=mid+1;int index=0;//定义一个零时数组,int[] temp=new int[(hight-low+1)];、//给零时数组赋值while(i<=mid&&j<=hight){if (arr[i] < arr[j]) {  temp[index++] = arr[i++];  } else {  temp[index++] = arr[j++];  }   }while(i<=mid){temp[index++]=arr[i++];}while(j<=hight){temp[index++]=arr[j++];}//吧零时数组的值赋给原数组for(int i1=0;i1<temp.length;i1++){arr[i1+low]=temp[i1];}}public static void main(String []a){int[] arr={123,5456,463,3478,858,9,2,88,34};MergeSortDemo m=new MergeSortDemo(arr); arr=m.sort(arr, 0, arr.length-1);System.out.println(Arrays.toString(arr));}}


0 0