数据结构与算法——归并排序算法
算法描述
归并排序就是利用归并的 思想实现的排序方法。它的基本原理:对于给定的一组记录,利用递归与分治方法将数据序列划分成为越来越少的半子表,在半子表排序,最后再用递归方法将排好序的半子表合并成越来越大的有序序列。

代码实现:
1 public class MergeSort { 2 public void sort(int[] arr,int low,int high) { 3 int mid=(low+high)/2; 4 if(low<high) { 5 sort(arr,low,mid); 6 sort(arr,mid+1,high); 7 merge(arr,low,mid,high); 8 } 9 } 10 11 public void merge(int arr[],int low,int mid,int high) { 12 int[] temp=new int[high-low+1]; 13 int i=low; 14 int j=mid+1; 15 int k=0; 16 while(i<=mid && j<=high) { 17 if(arr[i]<arr[j]) { 18 temp[k++]=arr[i++]; 19 }else { 20 temp[k++]=arr[j++]; 21 } 22 } 23 24 while(i<=mid) { 25 temp[k++]=arr[i++]; 26 } 27 while(j<=high) { 28 temp[k++]=arr[j++]; 29 } 30 31 for(int x=0;x<temp.length;x++) { 32 arr[x+low]=temp[x]; 33 } 34 } 35 }
归并排序的复杂度分析
一趟归并需要将数组arr中相邻的长度为h的有序序列进行两两归并,并将结果放到数组temp中,这需要将待排序列中的所有记录扫描一遍,因此耗费O(n)时间,而由完全二叉树的深度可知,整个归并排序需要进行log2n次,因此,总的时间复杂度为O(nlogn),而且这是归并排序算法中最好、最坏、平均的时间性能。
空间复杂度:O(n)
算法稳定性:归并排序算法是稳定的
posted on 2018-04-01 16:59 Joyce&wang 阅读(268) 评论(0) 收藏 举报
浙公网安备 33010602011771号