一个比较容易理解的归并排序--递归实现
2012-06-21 09:56
295 查看
一个归并排序的递归实现
1
#include <stdio.h>
2
#include <algorithm>
3
using namespace std;
4
#define MAX 1000
5
int buf[MAX];
6
void merge(int a[],int l,int m,int r)
7
{
8
int pa=l;
9
int pb=m+1;
10
int k=0;
11
12
while(pa<=m && pb<=r)
13
{
14
if(a[pa]<a[pb])
15
buf[k++]=a[pa++];
16
else
17
buf[k++]=a[pb++];
18
}
19
while(pa<=m)
20
buf[k++]=a[pa++];
21
while(pb<=r)
22
buf[k++]=a[pb++];
23
24
for(int i=0;i<k;i++)
25
a[l+i]=buf[i];
26
}
27
void mergeSort(int a[],int l,int h)
28
{
29
if(l<h)
30
{
31
int m=(l+h)/2;
32
mergeSort(a,l,m);
33
mergeSort(a,m+1,h);
34
merge(a,l,m,h);
35
}
36
}
37
void printIntArr(int n)
38
{
39
printf("%d ",n);
40
}
41
int main()
42
{
43
int a[10]={2,89,-1,8,0,7,13,0,11,3};
44
mergeSort(a,0,9);
45
//merge(a,0,4,9);
46
std::for_each(a,a+10,printIntArr);
47
return 0;
48
}
1
#include <stdio.h>
2
#include <algorithm>
3
using namespace std;
4
#define MAX 1000
5
int buf[MAX];
6
void merge(int a[],int l,int m,int r)
7
{
8
int pa=l;
9
int pb=m+1;
10
int k=0;
11
12
while(pa<=m && pb<=r)
13
{
14
if(a[pa]<a[pb])
15
buf[k++]=a[pa++];
16
else
17
buf[k++]=a[pb++];
18
}
19
while(pa<=m)
20
buf[k++]=a[pa++];
21
while(pb<=r)
22
buf[k++]=a[pb++];
23
24
for(int i=0;i<k;i++)
25
a[l+i]=buf[i];
26
}
27
void mergeSort(int a[],int l,int h)
28
{
29
if(l<h)
30
{
31
int m=(l+h)/2;
32
mergeSort(a,l,m);
33
mergeSort(a,m+1,h);
34
merge(a,l,m,h);
35
}
36
}
37
void printIntArr(int n)
38
{
39
printf("%d ",n);
40
}
41
int main()
42
{
43
int a[10]={2,89,-1,8,0,7,13,0,11,3};
44
mergeSort(a,0,9);
45
//merge(a,0,4,9);
46
std::for_each(a,a+10,printIntArr);
47
return 0;
48
}
相关文章推荐
- 摘要:我们经常会用到递归函数,但是如果递归深度太大时,往往导致栈溢出。而递归深度往往不太容易把握,所以比较安全一点的做法就是:用循环代替递归。文章最后的原文里面讲了如何用10步实现这个过程,相当精彩。本文翻译了这篇文章,并加了自己的一点注释和理解。
- CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现
- 实现一个简单的c++ list容器(含sort排序 链表归并算法实现)
- 归并排序的递归和非递归实现
- 堆排序、快速排序(递归与非递归)、归并排序效率比较
- 微软笔试题 大型文件外部排序(二路归并和k路归并的实现和比较)
- 递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
- [原]归并排序的java递归实现
- 编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
- Ilist排序,写一个对象比较的类,实现IComparer接口
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- 经典排序——归并、快排递归与非递归实现与冒泡排序
- 归并排序的迭代及递归实现
- 算法与数据结构——排序(八)归并排序的非递归实现
- CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现
- 归并排序的非递归实现
- 微软笔试题 大型文件外部排序(二路归并和k路归并的实现和比较)
- STL源码——list sort:归并排序的非递归实现
- 排序算法杂谈(三) —— 归并排序的非递归实现
- mergesort unrecursive 归并排序的非递归实现