归并排序

来源:互联网 发布:arp通过ip获取mac 编辑:程序博客网 时间:2024/06/05 23:41

public void mergeSort(int[] arr, int low, int high) {int mid = (low+high) / 2;if(low<high) {mergeSort(arr, low, mid);mergeSort(arr, mid+1, high);merge(arr, low, mid, high);}}private void merge(int[] arr, int low, int mid, int high) {int[] tmp = new int[high - low + 1];int i = low;    int j = mid + 1;    int k = 0;    while (i<=mid && j<= high){    if(arr[i]<arr[j]){    tmp[k++] = arr[i++];    } else {    tmp[k++] = arr[j++];    }    }    while (i<=mid) {    tmp[k++] = arr[i++];    }    while (j<= high) {    tmp[k++] = arr[j++];    }    for(int m =0 ; m< tmp.length; m++){    arr[m+low] = tmp[m];    }}


描述:说白了就是把一个N的问题不断分解最后变成一个二叉树,然后从二叉树底层向上递归。每一层都时间都是n,层高为lgn所以时间复杂度为O(nlogn)


归并排序的最好、最坏和平均时间复杂度都是O(nlogn),而空间复杂度是O(n),比较次数介于(nlogn)/2和(nlogn)-n+1,赋值操作的次数是(2nlogn)。因此可以看出,归并排序算法比较占用内存,但却是效率高且稳定的排序算法。


0 0
原创粉丝点击