#include <iostream>
using namespace std; void DealWhat(int ar[],int start,int end,int b[])
{
int mid = (start + end) / 2;
int i = start;
int j = mid+1;
int k = start;
//将start到end区间划分为两个部分。对这两个部分进行合并排序。每一个部分应该是有序的。由于我们是从一个数字開始排序,
//直到多个数字的排序,所以部分一定是有序的,逆向逐渐有序。 while (i <= mid && j <= end)
{
if (ar[i] > ar[j])
{
b[k++] = ar[j];
j++;
}
else
{
b[k++] = ar[i];
i++;
} }
while (i <= mid)
{
for (; i <= mid; i++)
{
b[k++] = ar[i];
}
}
while (j <= end)
{
for (; j <= end; j++)
{
b[k++] = ar[j];
}
}//以上是合并排序。
k = 0;
for (int m = start; m <= end; m++)
{
ar[m] = b[m];//ar数组的值也应该对应的变化。由于在start到end之间已经排序好了,我们仅仅须要将排序好的覆盖ar数组上面去。
//为下次递归排序做准备工作。
}
}
void Grial(int ar[],int start,int end,int b[])
{
if (start >= end)return;
int mid = (start + end) / 2;//每次取1/2递归深入。 Grial(ar, start, mid ,b);//左边。
Grial(ar,mid+1, end,b);//右边。 DealWhat(ar,start, end,b);//处理函数,直到递归到单个数字。 }
int main()
{
int a[] = {100,2,3,1,99,32,4,11,324,0};
int *b = new int[10];
Grial(a,0,9,b);
for (int i = 0; i < 10; i++)
{
cout << b[i]<<" " ;
}
cout << endl;//事实上这一步数组b到这个地方就能够delete了,由于数组a也随着排序改变。借助b这个辅助空间
//间接的排序原来的数组,本来能够不须要在外面传递b,只是我也不想改动了。
for (int i = 0; i < 10; i++)
{
cout << a[i]<<" ";
}
cout << endl; return 0;
}

感悟:

思想的重要性,假设你的思想没有在你编程时产生火焰,即使你对别人

思想理解的再深刻,终究仅仅是别人的东西。时间一长,你就会发现你已经

被这些看似光芒四射的东西所奴役。就会越来越累。

哈哈,拙见,一起努力。

C++归并算法的更多相关文章

  1. LeetCode315—Count of Smaller Numbers After Self—Java版归并算法

    这是我在研究leetcode的solution第一个解决算法时,自己做出的理解,并且为了大家能看懂,做出了详细的注释. 此算法算是剑指Offer36的升级版,都使用的归并算法,但是此处的算法,难度更高 ...

  2. 算法学习:并行化初体验_JAVA实现并行化归并算法

    这个系列包括算法导论学习过程的记录. 最初学习归并算法,对不会使其具体跑在不同的核上报有深深地怨念,刚好算倒重温了这个算法,闲来无事,利用java的thread来体验一下并行归并算法.理论上开的thr ...

  3. pl/sql 实现归并算法 (合并插入法的优化)

    CREATE OR REPLACE PACKAGE PG_MERGESORT IS -- Author : wealth_khb@126.com -- Created : 2009-10-20 10: ...

  4. java实现单链表归并算法

    public class LinkMergeSort {static int number=0;public static void main(String[] args) {int[] a = {1 ...

  5. 【题解】P1908 逆序对——归并算法

    先吐槽 这题做了两天,昨天讲分治,老师用归并讲了一遍,今天又用树状数组讲了一遍 归并不难,啊啊啊我居然才调出来 思路 归并两个数组时,对于第二个数组的元素a[c2],它与第一个数组中目前还没归到总数组 ...

  6. 笔试算法题(32):归并算法求逆序对 & 将数组元素转换为数组中剩下的其他元素的乘积

    出题:多人按照从低到高排成一个前后队列,如果前面的人比后面的高就认为是一个错误对: 例如:[176,178,180,170,171]中的错误对 为 <176,170>, <176,1 ...

  7. 基本排序算法的Python实现

    本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序.希望大家回顾知识的时候也能从我的这篇文章得到帮助. 为了防止误导读者,本文所有概念性 ...

  8. [Data Structure & Algorithm] 八大排序算法

    排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...

  9. 用Java写算法之归并排序

    转自:http://flyingcat2013.blog.51cto.com/7061638/1281026 前面的三种排序算法(冒泡排序,选择排序,插入排序)在平均情况下均为O(n^2)复杂度,在处 ...

随机推荐

  1. HOJ 1867 经理的烦恼 【 树状数组 】

    题意:给出一个区间,求这个区间里面素数的个数 这道题wa了好多次---是因为add操作没有写对 每次更新的时候,应该先判断没有加上y是不是质数,加上了y是不是质数 如果从质数变成不是质数,那么add( ...

  2. HDU 1505 City Game【DP】

    题意:是二维的1506,即在1506的基础上,再加一个for循环,即从第一行到最后一行再扫一遍--- 自己写的时候,输入的方法不对---发现输不出结果,后来看了别人的----@_@发现是将字母和空格当 ...

  3. SpringBoot学习笔记(14)----应用监控-HTTP方式

    SpringBoot提供了三种应用监控的方式 通过HTTP(最简单方便) 通过JMX 通过远程shell 这里就是用最简单的方式来使用SpringBoot的应用监控 首先引入依赖,pom文件如下 &l ...

  4. 前端换行显示,后端返回<br>

  5. 安装lnmp前请先运行screen

    当通过putty或者SecureCRT安装lnmp时, 网络突然掉线或者不小心putty被关掉等等原因, 造成lnmp安装过程被中断怎么办? 其实防止这种现象很简单, 只要在安装lnmp前执行scre ...

  6. CodeForces-1007A Reorder the Array 贪心 田忌赛马

    题目链接:https://cn.vjudge.net/problem/CodeForces-1007A 题意 给个数组,元素的位置可以任意调换 问调换后的元素比此位置上的原元素大的元素个数最大多少 思 ...

  7. Mysql学习总结(26)——MySQL子查询

    mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后 ...

  8. 洛谷——P1455 搭配购买

    https://www.luogu.org/problem/show?pid=1455 题目描述 明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某 ...

  9. iOS 中client和server的 Web Service 网络通信 (1)

    当你打开你手机上新浪微博应用或者知乎应用是.你是否会去想这些显示在手机上的图片和数据时从哪里来的?又是通过如何的方法实现的?好.那么接下来就介绍是如何实现的.过程又是怎么样的.      当我们浏览着 ...

  10. [Project Euler 429] Sum of squares of unitary divisors(数论)

    题目链接:https://projecteuler.net/problem=429 题目: 我们称 N 的约数 d 为特殊的当且仅当 gcd(d, n / d) = 1. 设 S(n) 为 n 所有特 ...