#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的更多相关文章

  1. 斯坦福算法分析和设计_2. 排序算法MergeSort

      Motivate MergeSort是个相对古老的算法了,为什么现在我们还要讨论这么古老的东西呢?有几个原因: 它虽然年龄很大了,但是在实践中一直被沿用,仍然是很多程序库中的标准算法之一. 实现它 ...

  2. C/C++ 数据结构之算法

    数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的 ...

  3. C/C++ 数据结构之算法(面试)

    数据结构中的排序算法. 排序算法的相关知识: (1)排序的概念:所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来. (2)稳定的排序方法:在待排序的文件中,若存在多个关键字相同的 ...

  4. CodeForces 873D Merge Sort 构造 分治

    题意 给出一个归并排序的算法\(mergesort\),如果对于当前区间\([l, r)\)是有序的,则函数直接返回. 否则会分别调用\(mergesort(l, mid)\)和\(mergesort ...

  5. 算法實例-C#-歸併排序-MergeSort

    # 算法实例 # 排序算法Sort 歸併排序MergeSort 算法說明 歸併的思路是任意兩個元素可以比較大小,那麼任意兩個有序的元素集合也可以通過比較大小的方式歸併成一個有序的元素集合 任何的無序元 ...

  6. MergeSort(归并排序)算法Java实现

    归并排序  归并排序 (merge sort) 是一类与插入排序.交换排序.选择排序不同的另一种排序方法.归并的含义是将两个或两个以上的有序表合并成一个新的有序表.归并排序有多路归并排序.两路归并排序 ...

  7. 算法之合并排序(mergeSort)

    合并排序算法在结构上是递归的,采用分治策略:就是将原有的问题划分为 n 个规模较小但结构与原问题相似的子问题,递归地解决这些子问题,然后合并其结果,就得到原问题的解. 合并排序的模式一般如下: 1.分 ...

  8. 普林斯顿大学算法课 Algorithm Part I Week 3 归并排序 Mergesort

    起源:冯·诺依曼最早在EDVAC上实现 基本思想: 将数组一分为(Divide array into two halves) 对每部分进行递归式地排序(Recursively sort each ha ...

  9. 《算法导论》归并排序----merge-sort

    伪代码请见<算法导论>2.3节 merge-sort实现: public class MergeSort {        public static void sort(double [ ...

随机推荐

  1. asp.net 时间操作

    /*在dt上加天数*/ DateTime dt = DateTime.Now.AddDays(); /*将指定的天数加到此实例的值上: 即以当前日期为基础的情况下上加上30天.*/ DateTime ...

  2. js 获取URL传递过来的值

    URL: http://127.0.0.1:8080/jspews/pews/inspection/InspectCheckCard.jsp?checkDate=2015-03-31 传递的值: ch ...

  3. USR-BLE101配置

    新买来的模块,默认为slave模式,波特率57600,8位数据位,无检验位,1位停止位. 发送+++a,进入命令模式. 1.设置模块名称 AT+NAME=BT_Shining 2.设置发射功率(最大功 ...

  4. RStudio相关

    1.设置默认目录,tool-Global Options,设定后要重启RStudio才能生效2.Ctrl+l清屏控制台3.↑健.回忆前一条命令,↓健相反4.Ctrl+↑,查找相应前缀的历史记录5.创建 ...

  5. linux哲学思想

    linux哲学思想 1.一切皆为文件 linux将所有的对象几乎都抽象为文件,无论是硬件设备.还是通讯接口都当做文件处理,这样可以设计统一的访问控制操作(read();write();delete() ...

  6. SQL SERVER 2005 DBCC PAGE命令说明

    夏日福利: 小泽玛利亚的“专业摄影”性感写真集:http://947kan.com/video/player-52475-0-0.html ------------------------------ ...

  7. Android开发--Android Studio配置

    1.常见问题 emulator: You might want to adjust your AVD RAM size and/or HAXM configuration to run in fast ...

  8. Android开发--ListView的应用

    1.简介 ListView用于以列表的形式展示数据.它在装载数据时,不能使用ListView类的add()等相关方法添加,而要借助Adapter对象进行添加.另外,由于 系统提供的Adapter往往不 ...

  9. uva 10271 (dp)

    题意:有n个数据,给定k,要从中选出k+8个三元组(x,y,z,其中x<=y<=z),每选一次的代价为(x-y)^2,求最小代价和. [解题方法] 将筷子按长度从大到小排序 排序原因: 由 ...

  10. Solr环境搭建过程中遇到的问题

    Solr下载地址:http://www.apache.org/dyn/closer.lua/lucene/solr/6.3.0 Solr搭建步骤转自:http://blog.csdn.net/wbcg ...