数据结构与算法——归并排序算法

算法描述

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

             

代码实现:

 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)    收藏  举报

导航