归并排序算法-阿里云开发者社区

开发者社区> carltmf> 正文

归并排序算法

简介: 算法导论第二章
+关注继续查看
#include 
//展示数组(声明)
void sort(int array[], int start, int end);
//归并排序(声明)
void show(int num[], int length);
int main(void)
{
  //初始化
  int array[] = {5, 2, 4, 7, 1, 3, 2, 6},len=8;
  printf("排序前:\n");
  show(array, len);
  //归并排序
  sort(array, 0, len-1);
  printf("排序后:\n");
  show(array, len);
}
//展示数组(声明)
void show(int num[], int length)
{
  for (int i = 0; i < length; i++)
  {
    printf("%3d", num[i]);
  }
  printf("\n");
}
//归并排序(定义)
void sort(int array[], int start, int end)
{
  //返回条件
  if (start == end)
  {
    return;
  }
  //定义左右边界
  int lstart = start, lend = (start + end) / 2, rstart = lend + 1, rend = end;
  //排序左
  sort(array, lstart, lend);
  //排序右
  sort(array, rstart, rend);
  //左右归并
  for (int i = rstart; i <= rend; i++)
  {
    int j = i - 1, tmp = array[i];
    while (array[j] > tmp && j >= 0)
    {
      array[j + 1] = array[j];
      j--;
    }
    array[j + 1] = tmp;
  }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
排序算法(七):快速排序
快速排序是通过分治的方式,根据选定元素将待排序集合拆分为两个值域的子集合,并对子集合递归拆分,当拆分后的每个子集合中元素个数为一时,自然就是有序状态。
697 0
冰与火之歌:「时间」与「空间」复杂度 | 算法必看系列三十六
对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间; 反之,求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。
2200 0
排序算法(五):堆排序
从二叉搜索树和平衡二叉树的介绍中,可以发现二叉树这种结构具有一个很好的特性,当有序的二叉树构造完成之后,更改树中节点后,只需要 的时间复杂度即可将二叉树重新调整为有序状态。
871 0
排序算法(十):基数排序
基数排序也可以称为多关键字排序,同计数排序类似,也是一种非比较性质的排序算法。将待排序集合中的每个元素拆分为多个总容量空间较小的对象,对每个对象执行桶排序后,则完成排序过程。
840 0
+关注
9
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载