数据结构 二路归并排序的实现
来源:互联网 发布:java 线程之间通信 编辑:程序博客网 时间:2024/06/05 14:07
#include<iostream>
using namespace std;
void MergeSortCore(int *a,int low,int mid,int high)
{
int *b = new int;
int i,j,k;
for(i=low,j=mid+1,k=low;i<=mid && j<=high;k++)
{
if(a[i]<a[j])
b[k] = a[i++];
else
b[k] = a[j++];
}
for(;i<=mid;i++)
b[k++] = a[i];
for(;j<=high;j++)
b[k++] = a[j];
for(i=low;i<=high;i++)
a[i] = b[i];
delete []b;
}
void MergeSort(int *a,int low,int high)
{
if(low<high)
{
int mid = low+(high-low)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
MergeSortCore(a,low,mid,high);
}
}
int main()
{
int a[]={46,38,56,30,88,80,38};
MergeSort(a,0,6);
for(int i=0;i<7;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
using namespace std;
void MergeSortCore(int *a,int low,int mid,int high)
{
int *b = new int;
int i,j,k;
for(i=low,j=mid+1,k=low;i<=mid && j<=high;k++)
{
if(a[i]<a[j])
b[k] = a[i++];
else
b[k] = a[j++];
}
for(;i<=mid;i++)
b[k++] = a[i];
for(;j<=high;j++)
b[k++] = a[j];
for(i=low;i<=high;i++)
a[i] = b[i];
delete []b;
}
void MergeSort(int *a,int low,int high)
{
if(low<high)
{
int mid = low+(high-low)/2;
MergeSort(a,low,mid);
MergeSort(a,mid+1,high);
MergeSortCore(a,low,mid,high);
}
}
int main()
{
int a[]={46,38,56,30,88,80,38};
MergeSort(a,0,6);
for(int i=0;i<7;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
运行结果:
0 0
- 数据结构 二路归并排序的实现
- 数据结构-二路归并及归并排序
- 数据结构 归并排序的实现
- 数据结构-数组排序-二路归并-循环实现-C语言
- 二路归并排序的Java实现
- 数据结构经典排序---二路归并排序
- 二路归并排序实现
- 【数据结构与算法】二路归并排序
- 数据结构归并排序实现
- 数据结构之归并排序的Java实现
- 数据结构之归并排序的实现
- 【数据结构】中归并排序的实现
- 两种归并排序算法的实现:二路归并排序和基本归并排序(虚拟消除递归的二路归并排序)
- 常见的五类排序算法图解和实现(归并类:二路归并排序)
- 递归实现自顶向下的二路归并排序
- 【数据结构与算法】【排序】归并排序的代码实现
- 二路归并排序,C++代码实现
- 二路归并排序c++实现
- Javascript在页面的执行顺序
- Magic Potions
- JVM学习笔记
- android里面Canvas,save()与restore()。
- CSS padding margin border属性详解
- 数据结构 二路归并排序的实现
- poj 1032 拆分数字使乘积最大
- 九度oj 1058
- Highmaps网页图表教程之图表配置项结构与商业授权
- xcode统计源代码行数
- mybatis动态SQL语句
- Android中的几种网络请求方式详解
- windows 2008 FTP 服务器搭建
- Hdu 3397 Sequence operation 区间合并+区间更新+翻转操作