#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. c# 02-18 值类型 引用类型 字符串的不可变性 字符串的处理方法

    1值类型 直接把值存在栈中 栈的特点是后进先出 int double decimal char struct enum bool 2 引用类型 把值存在堆中,把地址存在栈中: string 自定义的类 ...

  2. Docker学习笔记(1)----认识Docker

    1. 什么Docker? Docker是一个能把开发的应用程序自动部署到容器的引擎,它使用go语言编写的开源引擎,它在github上面个的地址为:https://github.com/docker/d ...

  3. webkit Safari的样式库

    1,webkit Box模型 CSS定义:-webkit-border-bottom-left-radius: radius; CSS定义:-webkit-border-top-left-radius ...

  4. 多任务-进程之Queue的进程间通信

    1.经过线程和进程的对比,不难的知道,线程和进程有相当大的区别,如全局变量资源不能够共享. 2.在不同的进程间,如何实现通信呢? 需要提及的一个概念就是Queue,它是一个消息队列,下面通过一个例子来 ...

  5. OpenResty.spec

    Name: openresty Version: 1.13.6.1 Release: 2%{?dist} Summary: OpenResty, scalable web platform by ex ...

  6. 程序设计基石与实践系列之编写高效的C程序与C代码优化

    原文出处: codeproject:Writing Efficient C and C Code Optimization 虽然对于优化C代码有非常多有效的指导方针,可是对于彻底地了解编译器和你工作的 ...

  7. swift入门-实现简单的登录界面

    // // AppDelegate.swift // UIWindow import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...

  8. ACM:动态规划,01背包问题

    题目: 有n件物品和一个容量为C的背包.(每种物品均仅仅有一件)第i件物品的体积是v[i],重量是w[i].选一些物品装到这个背包中,使得背包内物品在整体积不超过C的前提下重量尽量大. 解法:两种思路 ...

  9. thinkphp5项目--个人博客(七)

    thinkphp5项目--个人博客(七) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...

  10. NestedScrollView嵌套ListView可行性总结

    由于公司项目遗留代码仍然使用PullToRefreshListView(后文简称PTRLV),且存在复用,更换RecyclerView成本太大,同时又想使用CoordinatorLayout来实现一些 ...