排序总结----归并排序
来源:互联网 发布:哪里披头士的歌 知乎 编辑:程序博客网 时间:2024/06/05 13:32
//// Created by liyuanshuo on 2017/3/17.//#include "merge_sort.h"/* * * 归并排序: * * 基本思想: * 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列 * 每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 * * 归并方法: * * 设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, 转4. //其中一个子记录已经合并完毕,比较选取结束 * 3.选出min(r[i],r[j])中较小的存入辅助数组rf * 如果r[i] < r[j], rf[k] = r[i], i++, k++;转2. * 否则rf[k] = r[j]; j++; k++; 转2. * 4.将尚未处理完的子记录存入到数组rf; * 如果i<=m, 将r[i...m]存入到rf[k.....n] //前一个子记录非空 * 如果j<=n, 将r[j...n]存入到rf[k.....n] //后一个子记录非空 * 5.合并结束 */void merge( int r[], int rf[], int i, int m, int n){int j, k;for( j = m + 1, k<i ; i<=m && j<= n ; ++k ){if( r[j] < r[j] )rf[k] = r[j++];elserf[k] = r[i++];}while ( i <= m )rf[k++] = r[j++];while ( j <= n )rf[k++] = r[j++];}void merge_sort( int r[], int rf[], int len ){int l = 1;int *q = r;int *tmp;while ( l < len ){int s = l;l = 2 * s;int i =0;while ( i+l < len ){merge (q, rf, i, i+s-1, i+l-1);i += l;}if( i + s < len ){merge (q, rf, i, i+s-1, len-1);}tmp = q;q = rf;rf = tmp;}}/* * 两路归并的递归算法: */void m_sort( int r[], int rf[], int s, int t){int *rf2;if( s == t ){r[s] = rf[s];}else{int m = (s+t) / 2;m_sort (r, rf2, s, m);m_sort (r, rf2, m+1, t);merge (rf2, rf, s, m+1, t);}}void merge_sort_recursive( int r[], int rf[], int n ){m_sort (r, rf, 0, n-1);}
0 0
- 排序总结----归并排序
- 排序总结之归并排序
- 归并排序总结
- 归并排序总结
- C++归并排序总结
- 归并排序总结
- 归并排序总结
- 归并排序总结
- 堆排序、归并排序、快速排序总结
- 【算法总结】归并排序总结
- 归并排序-归并排序
- 排序算法总结之快速排序、归并排序、shell排序
- 排序总结:堆排序、快速排序、归并排序、基数排序
- 内部排序总结(四)归并排序
- 排序算法总结——归并排序
- 排序算法总结(六)归并排序
- 排序算法总结之归并排序
- 排序算法总结之归并排序
- 排序总结---插入排序
- JAVA线程同步锁机制分析
- 算法练习——最小公倍数
- C语言奶牛的锻炼
- 系统安装进入bios界面按键
- 排序总结----归并排序
- 从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 概念简介
- 粒子滤波跟踪算法
- EffectiveJava(31) -- 使用实例域代替Enum的序数排序
- python post共用一个session
- hadoop伪分布式搭建
- 设计模式第一话——单例模式
- 装饰模式和代理模式
- 关于NRF24l01调试能发送但收不到自动应答