C++归并算法
#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++归并算法的更多相关文章
- LeetCode315—Count of Smaller Numbers After Self—Java版归并算法
这是我在研究leetcode的solution第一个解决算法时,自己做出的理解,并且为了大家能看懂,做出了详细的注释. 此算法算是剑指Offer36的升级版,都使用的归并算法,但是此处的算法,难度更高 ...
- 算法学习:并行化初体验_JAVA实现并行化归并算法
这个系列包括算法导论学习过程的记录. 最初学习归并算法,对不会使其具体跑在不同的核上报有深深地怨念,刚好算倒重温了这个算法,闲来无事,利用java的thread来体验一下并行归并算法.理论上开的thr ...
- pl/sql 实现归并算法 (合并插入法的优化)
CREATE OR REPLACE PACKAGE PG_MERGESORT IS -- Author : wealth_khb@126.com -- Created : 2009-10-20 10: ...
- java实现单链表归并算法
public class LinkMergeSort {static int number=0;public static void main(String[] args) {int[] a = {1 ...
- 【题解】P1908 逆序对——归并算法
先吐槽 这题做了两天,昨天讲分治,老师用归并讲了一遍,今天又用树状数组讲了一遍 归并不难,啊啊啊我居然才调出来 思路 归并两个数组时,对于第二个数组的元素a[c2],它与第一个数组中目前还没归到总数组 ...
- 笔试算法题(32):归并算法求逆序对 & 将数组元素转换为数组中剩下的其他元素的乘积
出题:多人按照从低到高排成一个前后队列,如果前面的人比后面的高就认为是一个错误对: 例如:[176,178,180,170,171]中的错误对 为 <176,170>, <176,1 ...
- 基本排序算法的Python实现
本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序.希望大家回顾知识的时候也能从我的这篇文章得到帮助. 为了防止误导读者,本文所有概念性 ...
- [Data Structure & Algorithm] 八大排序算法
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...
- 用Java写算法之归并排序
转自:http://flyingcat2013.blog.51cto.com/7061638/1281026 前面的三种排序算法(冒泡排序,选择排序,插入排序)在平均情况下均为O(n^2)复杂度,在处 ...
随机推荐
- swift语言点评十五-$0
import UIKitimport XCPlayground class ViewController: UIViewController { func action() { print(" ...
- 异步线程编程,线程池,线程组,后面涉及ThreadLocal在理解
join模拟订单 package com.future.demo.future; /** * * * @author Administrator * */ public class NormalThr ...
- [AHOI2013]作业 莫队 树状数组
#include<cmath> #include<cstdio> #include<algorithm> #include<string> #inclu ...
- shell 特殊字符
shell 基础 # 当做注释的比较多 : 命令分隔符,在同一行上写两个或两个以上的命令 :: 是case 代码块的结束符 . 点作为文件名的一部分 隐藏文件 目录名 点是正则表达式中的匹配字符 '' ...
- mycat详细
MyCAT的优势基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远.业界优 ...
- solr在windows下的安装及配置
solr在windows下的安装及配置 首先,solr是基于Java开发的,所以使用的话需要先进行java环境的配置,在Java环境配置好之后就可以去http://www.apache.org/dyn ...
- 基于json数据格式实现的简单数据库——jsonDB
已在github上建立项目:https://github.com/ThinkerCodeChina/jsonDB /** +-------------------------------------- ...
- Fedora 17 安裝完全指南
Fedora 17 关闭U盘自动mount gsettings set org.gnome.desktop.media-handling automount "false" gse ...
- HDU 1827 Summer Holiday(强连通)
HDU 1827 Summer Holiday 题目链接 题意:中文题 思路:强连通缩点,每一个点的权值为强连通中最小值,然后入度为0的点就是答案 代码: #include <cstdio> ...
- hadoop-17-hive数据库元数据查看
hadoop-17-hive数据库元数据查看 存在本地的mysql中: user001用户中 : > mysql -uhive -phive mysql> use hive; mysql& ...