无聊时总结总结算法之06归并排序
来源:互联网 发布:win7关闭端口批处理 编辑:程序博客网 时间:2024/05/20 05:08
归并排序
1、基本思想:
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
归并排序示例:
2、算法时间复杂度
最好的情况下:一趟归并需要n次,总共需要logN次,因此为O(N*logN)
最坏的情况下,接近于平均情况下,为O(N*logN)
说明:对长度为n的文件,需进行logN 趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。
3、稳定性
归并排序最大的特色就是它是一种稳定的排序算法。归并过程中是不会改变元素的相对位置的。
4、缺点是,它需要O(n)的额外空间。但是很适合于多链表排序。
/*合并方法:设r[i…n]由两个有序子表r[i…m]和r[m+1…n]组成,两个子表长度分别为n-i +1、n-m。1.j=m+1;k=i;i=i; //置两个子表的起始下标及辅助数组的起始下标2.若i>m 或j>n,转⑷ //其中一个子表已合并完,比较选取结束3.选取r[i]和r[j]较小的存入辅助数组rf 如果r[i]<r[j],rf[k]=r[i]; i++; k++; 转⑵ 否则,rf[k]=r[j]; j++; k++; 转⑵4.将尚未处理完的子表中元素存入rf 如果i<=m,将r[i…m]存入rf[k…n] //前一子表非空 如果j<=n , 将r[j…n] 存入rf[k…n] //后一子表非空5.合并结束。*/void Merge(int* yuan,int* fu,int i, int m, int n){ int j = m+1; int k = i; for(;i<=m && j<=n;++k) { if(yuan[j] < yuan[i]) fu[k] = yuan[j++]; else fu[k] = yuan[i++]; } while(i <= m) fu[k++] = yuan[i++]; //上边没排完 while(j <= n) fu[k++] = yuan[j++];}void MergeSort(int* yuan , int* fu ,int length){ int len =1;//子表长度 int* q = yuan ; int* tmp ; while(len<length) { int m = len; //记录中间元素 len = 2*m; //子表是成倍的,余下再说 int i=0; while(i+len < length) //先判断可成倍的 前面的 序列 { Merge(q,fu,i, i+m-1, i+len-1); i +=len; } // //////////////// if(i+m <length) //再判断不可成倍的 后面的 序列 { Merge(q,fu,i,i+m-1,length-1); } tmp = q; q = fu; fu = tmp; //交换q,fu,以保证下一趟归并时,仍从q 归并到fu }}
1 0
- 无聊时总结总结算法之06归并排序
- 无聊时总结总结算法之02排序(希尔 完结)
- 无聊时总结总结算法之03简单选择排序
- 无聊时总结总结算法之04冒泡排序
- 无聊时总结总结算法之05快速排序
- 无聊时总结总结算法之07堆排序
- 无聊时总结总结算法之08桶排序
- 排序算法总结之归并排序
- 排序算法总结之归并排序
- 排序算法总结之归并排序
- 基础算法总结之归并排序
- 【算法总结】归并排序总结
- 无聊时总结总结算法之02排序(直接插入+希尔)
- 排序算法总结之快速排序、归并排序、shell排序
- 无聊时总结总结算法之01递归
- 无聊时总结总结算法之09基数排序
- 排序总结之归并排序
- 排序算法总结之归并排序 Merge Sort
- JSP的自定义标签(二)之带属性的标签
- 『数据挖掘』什么样的数据才能称得上是大数据?
- oracle11g密码效期及用户锁定
- 从notepad转投Sublime
- Android端使用retrofit上传多张图片,后端使用Php接收图片
- 无聊时总结总结算法之06归并排序
- Android 启动模式和启动标志的关系以及各种适应的使用场合
- 「深入Java」Annotation注解
- HttpServletRequest
- Going Home(最小费用最大流模板)
- CSS3 去除苹果浏览器按钮input[type="submit"]和input[type="reset"]的默认样式
- 2.7-3 如何将Eclipse 项目导入Android studio中
- 算法相关
- Java排序算法:希尔排序