归并排序

来源:互联网 发布:温州平阳网络问政平台 编辑:程序博客网 时间:2024/05/20 16:34

归并排序是分治思想的典型应用。时间复杂度是O(nlgn)[分解的过程是O(lgn),合并的过程是O(n)],是稳定排序。

public class MergeSort{//arr[start]-arr[mid]  arr[mid+1]-arr[end]分别是有序的public static void merge(int[] arr,int start,int mid,int end){int[] tmp = new int[arr.length];int index = start;int tmp_mid = mid;int tmp_start = start;int tmp_end = end;while(start < tmp_mid && mid<=end){if(arr[start] <= arr[mid]){tmp[index++] = arr[start];start++;}else{tmp[index++] = arr[mid];mid++;}}/*while循环退出有两种情况,start>=tmp_mid或mid>end*/if(start >= tmp_mid){for(int i = mid;i <= end; i++)tmp[index++] = arr[i];}if(mid > end){for(int i = start;i<tmp_mid;i++)tmp[index++] = arr[i];}for(int i = tmp_start; i <= tmp_end; i++)arr[i] = tmp[i];}//死循环public static void mergeSort(int[] arr,int start,int end){if(start>=end) return;int mid = (start+end)/2;mergeSort(arr,start,mid);mergeSort(arr,mid+1,end);merge(arr,start,mid+1,end);}public static void main(String[] args){int[] arr = {0,1,5,7,2,5,6};mergeSort(arr,1,arr.length-1);display(arr);}public static void display(int[] arr){for(int i:arr){System.out.print(i+" ");}System.out.println();}}

0 0
原创粉丝点击