排序算法总结之归并排序
来源:互联网 发布:密码破解软件 编辑:程序博客网 时间:2024/06/01 07:33
//递归方法
/* L = 左边起始位置, R = 右边起始位置, RightEnd = 右边终点位置*/void Merge( ElementType A[], ElementType TmpA[], int L, int R, int RightEnd ){ /* 将有序的A[L]~A[R-1]和A[R]~A[RightEnd]归并成一个有序序列 */ int LeftEnd, NumElements, Tmp; int i; LeftEnd = R - 1; /* 左边终点位置 */ Tmp = L; /* 有序序列的起始位置 */ NumElements = RightEnd - L + 1;//必须记录个数,因为不是从0到结尾的 while( L <= LeftEnd && R <= RightEnd ) { if ( A[L] <= A[R] ) TmpA[Tmp++] = A[L++]; /* 将左边元素复制到TmpA */ else TmpA[Tmp++] = A[R++]; /* 将右边元素复制到TmpA */ } while( L <= LeftEnd ) TmpA[Tmp++] = A[L++]; /* 直接复制左边剩下的 */ while( R <= RightEnd ) TmpA[Tmp++] = A[R++]; /* 直接复制右边剩下的 */ for( i = 0; i < NumElements; i++, RightEnd -- ) A[RightEnd] = TmpA[RightEnd]; /* 将有序的TmpA[]复制回A[] */} void Msort( ElementType A[], ElementType TmpA[], int L, int RightEnd ){ /* 核心递归排序函数 */ int Center; if ( L < RightEnd ) { Center = (L+RightEnd) / 2; Msort( A, TmpA, L, Center ); /* 递归解决左边 */ Msort( A, TmpA, Center+1, RightEnd ); /* 递归解决右边 */ Merge( A, TmpA, L, Center+1, RightEnd ); /* 合并两段有序序列 */ }} void MergeSort( ElementType A[], int N ){ /* 归并排序 */ ElementType *TmpA; TmpA = new int[N]; if ( TmpA != NULL ) { Msort( A, TmpA, 0, N-1 ); free( TmpA ); } else printf( "空间不足" );}
阅读全文
1 0
- 排序算法总结之归并排序
- 排序算法总结之归并排序
- 排序算法总结之归并排序
- 排序算法总结之快速排序、归并排序、shell排序
- 基础算法总结之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 小白学tkinter(entry的验证函数)
- 数据结构之链表
- Fragment里ScrollView嵌套RecyclerView显示不全的问题
- 基于H5+ HBuilder开发app android离线打包步骤 记录比较关键点
- [离散数学]偏序与全序的区别、解释
- 排序算法总结之归并排序
- STM32F10XXX的复位
- Arduino PID-Auto Tune库函数指南
- pat 乙级1033 旧键盘打字(20)
- C#中的反射:返回指定类型的字段
- 搭建git服务器
- 线段树--双标签
- Memcached缓存
- iOS远程真机之非越狱iOS设备的远程控制实现原理