算法 排序算法之归并排序 java实现

来源:互联网 发布:淘宝卖家自动回复语 编辑:程序博客网 时间:2024/06/05 20:51
package SortArith;/** * 归并排序 * 递归,将原数组一分为二为两个数组,分别对两数组进行排序,将两排序后数组进行合并。 * @author lwk * 时间复杂度O(nlogn) * 空间复杂度O(n+logn) * 稳定排序 */public class MergeSort {          public static void mergeSort(int[] array){     if(array == null || array.length ==0){     return;     }     mergeSort(array,0,array.length-1);     }          public static void mergeSort(int[] array,int start,int end){      if(start < end){      int mid = (start + end)/2;      //将数组一分为二,分别排序后,再合并数组      mergeSort(array,start,mid);      mergeSort(array, mid+1, end);      //合并数组时要进行排序      merge(array,start,mid,end);      }      }          public static void merge(int[] array,int start,int mid,int end){     //构建新数组,将左右数组合并为有序的新数组     int[] tempArr = new int[end - start + 1];          //第一个数组的起始位置为start     int left = start;     //第二个数组的起始位置     int right = mid + 1;     //新数组的起始位置为零     int third = 0;     while(left <= mid && right <= end){     if(array[left] <= array[right]){     //将较小值先赋给新数组     tempArr[third++] = array[left++];     }else{     tempArr[third++] = array[right++];     }     }     //若左数组指针未指向mid,说明左数组还有余下元素待装入新数组     while(left <= mid){     tempArr[third++] = array[left++];     }     while(right <= end){     tempArr[third++] = array[right++];     }     //此时新数组即为合并后的有序数组     //将新数组的值全部赋给array     for (int i = 0; i < tempArr.length; i++) {     array[start++] = tempArr[i]; }     }}

0 0
原创粉丝点击