合并排序三-算法导论递归实现
/*
* 递归方法实现归并排序
* Lzy 2011-5-25
*/
#include
#define N 8
//归并排序 递归实现
void merge(int X[], int low, int mid, int high) /*两个有序表的合并算法*/
{ //R[low..mid]和R[mid+1..high]是两个有序表
int R1[N]; //临时缓冲区
int i = low, j = mid+1, k = low; //k是Rl的下标,i、j分别为R[low..m]和R[m+1..high]的下标
for(; i <= mid && j <= high; k++) /*依次比较两个了序列中数据元素的大小*/
{
if(X[i] <= X[j]) /*将较小的数移入缓冲区*/
R1[k] = X[i++]; //将R[low..m]中的记录放入R1中
else
R1[k] = X[j++]; //将R[m+1..high]中的记录放入R1中
}
while(i <= mid) //将R[low..m]余下部分复制到R1
R1[k++] = X[i++];
while(j <= high) //将R[m+1..high]余下部分复制到R1
R1[k++] = X[j++];
for(k = low; k <= high; k++) /*将缓冲区中的数据元素复制回原序列中*/
X[k] = R1[k];
}
void Merge_Sort(int X[], int low, int high) /* 定义归并排序函数,递归方式 */
{
int mid;
if(low < high)
{
mid = (low + high) / 2;
Merge_Sort(X, low, mid); /* 递归调用,将子序列x[low~mid]归并为有序序列 */
Merge_Sort(X, mid + 1, high); /* 递归调用,将子序列x[mid+1~high]归并为有序序列 */
merge(X,low,mid,high); /* 将子序列x[low~mid]和x[mid+1~high]进行归并 */
}
}
/******测试程序*******/
int main(void)
{
int i;
int X[N] = {26,23,96,13,36,67,45,15};
Merge_Sort(X,0,7);
for(i = 0; i < 8; i++)
printf("%d ",X[i]);
}
转载于:https://www.cnblogs.com/nowornever-L/p/5505995.html
- 点赞
- 收藏
- 分享
- 文章举报
- 算法设计与分析 合并排序的递归实现算法
- 合并排序的递归实现算法
- 插入排序,合并排序,堆排序,快速排序,计数排序的实现(算法导论)
- 插入排序的递归实现和二分查找递归实现,算法导论2.3-4和2.3-5
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 快速排序的C#实现以及,算法导论上之后一个习题的思考
- 最大堆排序java实现(算法导论第6章)
- Ackerman函数的递归、全排列的递归实现、整数划分的递归、二分搜索的递归、合并排序的递归、.快速排序
- 算法实现(7)合并排序
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- 各种算法的C#实现系列1 - 合并排序的原理及代码分析
- 算法 合并排序 C++实现
- 【算法导论】二叉树的前中后序非递归遍历实现
- “用最小堆将k个已排序链表合并为一个排序链表”(算法导论 练习6.5-9)
- 合并(归并)排序 算法原理与实现
- 快速排序quicksort-算法导论java实现
- 算法导论--不用哨兵实现归并排序
- 剑指Offer 面试题25:合并两个排序的链表(递归+非递归) Java代码实现
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- 算法导论 第8章 线性时间排序 C++实现