归并排序
Posted 韩思明
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。
基本思想
归并排序是建立在归并操作上的一种有效的排序算法。
该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将一个数组分为越来越小的子列表,每个子列表单独进行排序,然后合并形成更大的有序列表。
通过归并子列表元素来合并子列表就是归并排序(Merge Sort)
代码实现
package com.csdhsm.sort; public class MergeSort { public void sort(int[] arr,int low,int high){ int mid = (low + high)/2; if(low < high){ sort(arr,low,mid); sort(arr,mid+1,high); mergeSort(arr,low,mid,high); } } private void mergeSort(int[] arr,int low,int mid,int high){ /** * 用于存放归并好的数组 */ int[] copyArr = 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]){ copyArr[k] = arr[i]; i++; }else{ copyArr[k] = arr[j]; j++; } k++; } /** * 下面两个循环只会执行一个 */ while(i<=mid){ copyArr[k] = arr[i]; i++; } while(j<=high){ copyArr[k] = arr[j]; j++; } for(i=0;i<=k;i++){ arr[low+i] = copyArr[i]; } } }
效率分析
稳定
空间复杂度:O(n)
时间复杂度:O(nlog2n)
最坏情况:O(nlog2n)
最好情况:O(nlog2n)
以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章