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)复杂度,在处 ...
随机推荐
- 图层Layers的介绍
图层包含的要素可以是矢量形式的也可以是栅格形式的. 这里介绍其中一种:添加TileLayer.(加载Image类型的图层) 引用:"esri/layers/TileLayer" 举 ...
- codeforces 914 D Bash and a Tough Math Puzzle
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #i ...
- 搭建rsync实时同步
1.本实验基于centos6.5服务器做的 cat cat /etc/redhat-release 2.在配置环境之前需要先将服务器自带的rsync卸除 yum -y remove rsync* 3. ...
- layui框架下的摸索与学习
一.table表格内的查询 1.单个条件查询: 主要代码: <%-- Created by IntelliJ IDEA. User: Administrator Date: 2019/1/14 ...
- Go语言的前景分析
本文为原创文章,转载注明出处,asdfasdfasdf 欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章.觉得好的话,顺手分享到朋 ...
- CSS 清除浮动 伪类
参考链接:https://www.cnblogs.com/yingsu/p/7261904.html 不清楚浮动的结果和影响不再描述,清除浮动的代码别处也有很多,每种方法都有十分简洁的代码,我今天学到 ...
- httpd: Could not reliably determine the server's fully qualified domain name
[root@luozhonghua sbin]# service httpd start Starting httpd: httpd: apr_sockaddr_info_get() failed f ...
- 7、java封装、继承、聚合组合
1封装:封装的是属性,封:private 装:set.get‘ 可以看做将属性和get/set方法捆绑的过程. 优点:1.防止对封装数据的未经授权的访问,提高安全性.使用者只能通过事先预定好的方法来访 ...
- Boostrap零散
12 row 是核心控件 class="form-control" 弹窗口<input data-toggle="modal" data-target=& ...
- CUDA笔记(十)
下午仔细研究了两个程序,然后搜了一下解决方法 http://blog.sina.com.cn/s/blog_6de28fbd01011cru.html http://blog.csdn.net/che ...