算法-MergeSort
#include <iostream>
#include <vector>
#include <iterator> using namespace std; int COMPARE_COUNT = ; void merge_sort(vector<int> &array, vector<int> &aux, int lo, int hi)
{
if ( lo >= hi )
return; int mid = ( hi + lo ) / ;
merge_sort(array, aux, lo, mid);
merge_sort(array, aux, mid + , hi); //vector<int> aux;
for ( int i = lo; i < hi +; ++i )
aux[i] = array[i]; int i = lo;
int j = mid + ;
int k = lo; while ( k < hi + )
{
if ( i > mid ) array[k++] = aux[j++];
else if ( j > hi ) array[k++] = aux[i++];
else if ( aux[i] <= aux[j] )
{
array[k++] = aux[i++];
COMPARE_COUNT++;
}
else{
array[k++] = aux[j++];
COMPARE_COUNT++;
}
} return;
} void Print(const vector<int> &array)
{
vector<int>::const_iterator _begin = array.begin();
while ( _begin != array.end() )
cout<<*_begin++<<" "; cout<<endl;
} int main()
{
cout<<"Please input the size of the array: ";
int size;
cin>>size; vector<int> array;
for ( int i = ; i < size; ++i )
array.push_back( rand() % size + ); cout<<"The shuffling array is:"<<endl;
Print(array); vector<int> aux;
aux.resize(array.size());
//aux = array;
merge_sort(array, aux, , size - ); cout<<"The sorted array is:"<<endl;
Print(array); //cout<<"Comparing count is: "<<COMPARE_COUNT<<endl; return ;
}
输出结果:

算法-MergeSort的更多相关文章
- 斯坦福算法分析和设计_2. 排序算法MergeSort
Motivate MergeSort是个相对古老的算法了,为什么现在我们还要讨论这么古老的东西呢?有几个原因: 它虽然年龄很大了,但是在实践中一直被沿用,仍然是很多程序库中的标准算法之一. 实现它 ...
- C/C++ 数据结构之算法
数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的 ...
- C/C++ 数据结构之算法(面试)
数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的 ...
- CodeForces 873D Merge Sort 构造 分治
题意 给出一个归并排序的算法\(mergesort\),如果对于当前区间\([l, r)\)是有序的,则函数直接返回. 否则会分别调用\(mergesort(l, mid)\)和\(mergesort ...
- 算法實例-C#-歸併排序-MergeSort
# 算法实例 # 排序算法Sort 歸併排序MergeSort 算法說明 歸併的思路是任意兩個元素可以比較大小,那麼任意兩個有序的元素集合也可以通過比較大小的方式歸併成一個有序的元素集合 任何的無序元 ...
- MergeSort(归并排序)算法Java实现
归并排序 归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并排序 ...
- 算法之合并排序(mergeSort)
合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解. 合并排序的模式一般如下: 1.分 ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 归并排序 Mergesort
起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each ha ...
- 《算法导论》归并排序----merge-sort
伪代码请见<算法导论>2.3节 merge-sort实现: public class MergeSort { public static void sort(double [ ...
随机推荐
- js加密解密
<script> document.write("<xmp>"); document.write(function(p,a,c,k,e,r){}(''.sp ...
- ubuntu apt-get 时 Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
sudo cp /etc/apt/sources.list ~/ sudo wget "http://pastebin.com/raw.php?i=uzhrtg5M" -O /et ...
- 百度app测试服务
https://cloud.baidu.com/product/mat.html?t=cp:ct|pp:fcforbce242jrcs|cn:fcforbce242|pu:newAATJRKWS002 ...
- Sql获取周、月、年的首尾时间。
,) -- 本周周一 ,,,)) -- 本周周末 ,) -- 本月月初 ,,,)) -- 本月月末 ,,) -- 上月月初 ,,)) -- 上月月末 ,) -- 本年年初 ,,,)) -- 本年年末 ...
- R语言实战(二)数据管理
本文对应<R语言实战>第4章:基本数据管理:第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx ...
- js中function函数
function:是具备某个功能的方法,方法本身没有意义,只有执行方法才有价值. function: 1 创建一个函数: 2 执行这个方法: 例: 创建 function 方法名(){ 存放某个功能的 ...
- AFNetworking到底做了什么?(二)
接着上一篇的内容往下讲,如果没看过上一篇内容可以点这: AFNetworking到底做了什么? 之前我们讲到NSUrlSession代理这一块: 代理8: /* task完成之后的回调,成功和失败 ...
- BADI_MATERIAL_CHECK(物料主数据表的增强检查)
多次调用的BADI,'业务加载项定义的多重使用意味着可以有多个活动的 业务加载项实施.在进行调用时,将调用所有上述实施,但调用顺序不可预期. 因此,如果使用多重使用 业务加载项定义,那么顺序不得起到任 ...
- 在input中实现点点点与当鼠标移上去时显示剩余的字
项目中经常会遇到这个问题,在一个内容框中,由于框的宽度是固定的,但是里面的内容却有很多,那么这个时候需求里就要求第一,多余的字要以点点点的形式隐藏,第二,当鼠标移上去的时候要以title提示的方式显示 ...
- Bootstrap 表单
表单布局 Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 垂直或基本表单 基本的表单结构是 Bootstrap 自带的,个别的表单控件自动接收一些全局样式.下面列 ...