排序算法之归并排序
来源:互联网 发布:淘宝童装店铺简介 编辑:程序博客网 时间:2024/06/13 04:04
原理:
将一个序列进行拆分,直到不能拆分为止,分为(N个组),然后再将两组元素进行比较,排列成有序的组,直到组合成一个组。
举例:
31,12,5,57,2,31,90,32,95,76
拆分: {31,12,5,57,2} {31,90,32,95,76}
拆分: {31,12} {5,57,2} {31,90} {32,95,76}
拆分: {31} {12} {5} {57,2} {31} {90} {32} {95,76}
拆分: {31} {12} {5} {57} {2} {31} {90} {32} {95} {76}
合并: {31} {12} {5} {2,57} {31} {90} {32} {76,95}
合并: {12,31} {2,5,57} {31,90} {32,76,95}
合并: {2,5,12,31,57} {31,32,76,90,95}
合并: {2,5,12,31,31,32,57,76,90,95}
注:红色数字表示此时不会再拆分。
代码:
void Merge(int *l, int lsize, int *r, int rsize){int i, j, k;i = j = k = 0;int temp[10];while (i < lsize&&j<rsize){if (l[i] < r[j])temp[k++] = l[i++];elsetemp[k++] = r[j++];}while (i<lsize)temp[k++] = l[i++];while (j<rsize)temp[k++] = r[j++];for (int m = 0; m != k; ++m){l[m] = temp[m];}}void MergeSort(int a[],int nlen){if (nlen>1){int *left = a;int left_size = nlen / 2;int *right = a + left_size;int right_size = nlen - left_size;MergeSort(left, left_size);MergeSort(right, right_size);Merge(left, left_size, right, right_size);}}
总结:
归并排序算法的思想很简单,没有过多的因素干扰待排序序列,是稳定的排序算法。时间复杂度为O(Nlog2N)。
0 0
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- sql注入--入门篇
- 弱校联盟#con3--概率(阶乘逆元打表)
- Angular知识点梳理
- 设计模式博文索引
- 设计模式概述
- 排序算法之归并排序
- IDEA使用笔记
- GreenDao 3.2.0 的基本使用
- 多物体组合运动最终版
- php访问数据库一般步骤
- vps建立pptp
- 「Javascript」——跨域问题
- Android Jar包冲突及解决方法
- element