归并排序(merge sort)源码
2008-09-30 21:06
330 查看
#include <iostream>
using namespace std;
void merge(int ia[], int p, int q, int r)
{
int n1 = q - p + 1; // n1 = [p, q]
int n2 = r - q; // n2 = (q, r]
int ia1[n1];
int ia2[n2];
for(int i=0; i<n1; i++)
{
ia1[i] = ia[p+i];
}
ia1[n1] = 0x7FFFFFFF; // sentinel
for(int i=0; i<n2; i++)
{
ia2[i] = ia[q+1+i];
}
ia2[n2] = 0x7FFFFFFF; // sentinel
int i, j, k;
i = j = 0;
k = p;
while( k <= r )
{
if( ia1[i]<=ia2[j] )
{
ia[k] = ia1[i];
i++;
}
else
{
ia[k] = ia2[j];
j++;
}
k++;
}
}
void MergeSort(int ia[], int p, int q)
{
if(q > p)
{
int r = (p+q)/2;
MergeSort(ia, p, r);
MergeSort(ia, r+1, q);
merge(ia, p, r, q);
}
}
int main()
{
int ia[6] = {6,5,4,3,2,1};
MergeSort(ia, 0, 5);
for(int i=0; i<6; i++)
{
cout << ia[i] << endl;
}
}
using namespace std;
void merge(int ia[], int p, int q, int r)
{
int n1 = q - p + 1; // n1 = [p, q]
int n2 = r - q; // n2 = (q, r]
int ia1[n1];
int ia2[n2];
for(int i=0; i<n1; i++)
{
ia1[i] = ia[p+i];
}
ia1[n1] = 0x7FFFFFFF; // sentinel
for(int i=0; i<n2; i++)
{
ia2[i] = ia[q+1+i];
}
ia2[n2] = 0x7FFFFFFF; // sentinel
int i, j, k;
i = j = 0;
k = p;
while( k <= r )
{
if( ia1[i]<=ia2[j] )
{
ia[k] = ia1[i];
i++;
}
else
{
ia[k] = ia2[j];
j++;
}
k++;
}
}
void MergeSort(int ia[], int p, int q)
{
if(q > p)
{
int r = (p+q)/2;
MergeSort(ia, p, r);
MergeSort(ia, r+1, q);
merge(ia, p, r, q);
}
}
int main()
{
int ia[6] = {6,5,4,3,2,1};
MergeSort(ia, 0, 5);
for(int i=0; i<6; i++)
{
cout << ia[i] << endl;
}
}
相关文章推荐
- 【归并排序】 Merge_sort 实现源码 (自写)
- 归并排序(merge sort)c++实现
- 归并排序(MergeSort)
- 归并排序(MergeSort)
- 排序1+4:归并排序(MergeSort)和堆排序(HeapSort)
- 归并排序(merge sort)
- 数据结构和算法分析之排序篇--归并排序(Merge Sort)和常用排序算法时间复杂度比较(附赠记忆方法)
- Java 归并排序(MergeSort)
- 归并排序(MERGE_SORT)
- 算法---归并排序(Merge Sort)---多版本对比
- 归并排序(mergeSort)之非递归算法
- Merge Sort 归并排序
- Java实现算法归并排序(MergeSort)
- 常用排序算法—Merge Sort(归并排序)
- 归并排序(Merge-Sort)
- Java排序算法(三)--归并排序(MergeSort)递归与非递归的实现
- 归并排序(merge sort)的一个基于模板的实现
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- 冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort)
- 归并排序(merge sort)