Chinaunix首页 | 论坛 | 博客
  • 博客访问: 260360
  • 博文数量: 84
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 927
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-06 23:00
个人简介

growing

文章分类

全部博文(84)

文章存档

2017年(6)

2016年(61)

2015年(17)

我的朋友

分类: C/C++

2016-04-08 12:28:46

1.归并排序

  1. void MergrSection(int *a,int *tmp,int begin1,int end1,int begin2,int end2)
  2. {
  3.     assert(a&&tmp);
  4.     int index = begin1;
  5.     while(begin1 <= end1 && begin2 <= end2)
  6.     {
  7.         if(a[begin1] < a[begin2])
  8.         {
  9.             tmp[index++] = a[begin1++];
  10.         }
  11.         else
  12.         {
  13.             tmp[index++] = a[begin2++];
  14.         }
  15.         while(begin1 <= end1)
  16.         {
  17.             tmp[index++] = a[begin1++];
  18.         }
  19.         while(begin2 <= end2)
  20.         {
  21.             tmp[index++] = a[begin2++];
  22.         }
  23.     }
  24. }
  25. void _MergeSort(int *a,int *tmp,int left,int right)
  26. {
  27.     assert(a && tmp);
  28.     if(left < right)
  29.     {
  30.         int mid = left +(right - left)/2;
  31.         _MergeSort(a,tmp,left,mid);
  32.         _MergeSort(a,tmp,mid+1,right);
  33.         MergrSection(a,tmp,left,mid,mid+1,right);
  34.         memcpy(a+left,tmp+left,(right-left+1)*sizeof(int));
  35.     }
  36. }

  37. void MergrSort(int *a,size_t size)
  38. {
  39.     assert(a);
  40.     int *tmp = new int[size];
  41.     _MergeSort(a,tmp,0,size -1);
  42.     delete[] tmp;
  43.     
  44. }

优化思路:
像快排一样,当区间变小到一定程度时可采用直接插入排序优化其效率。
阅读(1704) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~