码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序实现

时间:2016-08-10 12:51:38      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

算法原理:归并排序的思想是分治,将一个带排序的数组分成两个较小的数组,然后分别进行排序,组后将两个排好序 的较小的数组合并起来,就得到了原来数组的排序后的结果。应该注意的是这种将两个排好序的数组合并有一个较好的算法,时间复杂度是O(n1+n2)的。 n1、n2分别是两个小数组的长度。
算法代码:

#include <iostream>

 using namespace std;

 void merge_sort(int *arr,int start,int end,int *temp)
 {
     if(end > start+1)
     {
         int mid = start + (end - start) / 2;
         merge_sort(arr,start,mid,temp);
         merge_sort(arr,mid,end,temp);
         int i = start , j = mid , k = start;
         while(i < mid || j < end)
         {
             if(j >= end || (i < mid && arr[i] <= arr[j]))
             {
                 temp[k++] = arr[i++];
             }
             else
             {
                 temp[k++] = arr[j++];
             }
         }
         for(i = start ; i < end ; ++i)
         {
             arr[i] = temp[i];
         }
     }
 }


 int main()
 {
     int temp[8];
     int arr[]  = {2,1,4,3,8,7,5,6};
     merge_sort(arr,0,8,temp);
     for(int i = 0 ; i < 8 ; ++i)
     {
         cout<<arr[i]<<" ";
     }
     cout<<endl;
     return 0;
 }

小结:归并排序时稳定的排序,但是不属于原地排序,因为用了额外的O(n)的空间,时间复杂度降到了O(n*log n),并且对任意的数组进行排序时间复杂度都能控制在O(n*logn)。

 

归并排序实现

标签:

原文地址:http://www.cnblogs.com/wade-luffy/p/5755943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!