java实现归并排序

来源:互联网 发布:望京李春姬直播软件 编辑:程序博客网 时间:2024/05/21 15:00

     1 归并算法:思想:假设初始序列含有n个记录,进行两两归并,得到长度为不小于n/2的最大整数个两个一组或者一个一组的有序序列 然后再进行二二归并,知道完全有序。

public static void mergingsort(short[] arr,int low,int high){if(low>=high)   return;else{int middle=(low+high)/2;//找到中间索引,进行二路归并mergingsort(arr, low, middle);mergingsort(arr, middle+1, high);merge(arr,low,middle,high);//将两个有序序列合并成一个有序序列}}//实现归并算法public static void merge(short[] arr,int low,int middle,int high){//申请一个相同大小的数组  归并算法需要的额外的内存空间与数组的长度成正比short [] temp=new short[arr.length];//最理想的情况是 后边数组的首项大于等于前边数组的尾项,可以在这里加一个判断int i=low;//索引指向前半部分数组int j=middle+1;//索引指向后半部分数组int k=0;//记录中间数组的索引for(;i<=middle&&j<=high;k++){if(arr[i]<=arr[j]){temp[k]=arr[i++];//前半数组"指针"后移}else{temp[k]=arr[j++];}}                //此时 两个序列中只有一个序列的索引到达最后if(i<=middle)   while (i <= middle) {            temp[k++] = arr[i++];        }else while (j <= high) {            temp[k++] = arr[j++];        }//此时temp处于有序的状态,将数据返回arr for(int n=0;n<k;n++){arr[low+n]=temp[n];//因为递归过程中 数组的起始位置是low  是一个可变的值}}


0 0
原创粉丝点击