排序算法系列之【归并算法】

关于原理,这里就不在多说了,我仅在这里贴上我撸的代码:

 1 #include<iostream>
 2 using namespace std;
 3
 4 const int N = 9;
 5 static int c = 0;
 6
 7 void Merge(int sr[], int tr[], int s, int m, int t){
 8     int i=s, j=m+1, k=0;
 9     for (; s <= m &&j <= t; i++){
10         if (sr[s] < sr[j]){
11             tr[i] = sr[s++];
12         }
13         else{
14             tr[i] = sr[j++];
15             ++c;
16         }
17     }
18     if (s <= m){
19         for (k = 0; k <= m - s; k++){
20             tr[i + k] = sr[s + k];
21             ++c;
22         }
23     }
24     if (j <= t){
25         for (k = 0; k <= t - j; k++){
26             tr[i + k] = sr[j + k];
27         }
28     }
29 }
30
31
32 void MSort(int sr[], int tr1[], int s, int t){
33     int tr2[N];
34     int mid;
35     if (s == t){
36         tr1[s] = sr[s];
37     }
38     else{
39         mid = (s + t) / 2;
40         MSort(sr, tr2, s, mid);
41         MSort(sr, tr2, mid + 1, t);
42         Merge(tr2, tr1, s, mid, t);
43     }
44 }
45
46 void MergSort(int a[], int n)
47 {
48     int b[9];
49     MSort(a, b, 0, 8);
50 }
51
52 int main(){
53     int a[] = { 9, 5, 1, 6, 2, 3, 8, 4, 7 };
54     int n = 9;
55     MergSort(a,n);
56     return 0;
57 }
时间: 2024-10-05 23:09:06

排序算法系列之【归并算法】的相关文章

趣写算法系列之--匈牙利算法(真的很好理解)

[书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程] 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. -------等等,看得头大?那么请看下面的版本: 通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感(-_-

【数据结构&amp;&amp;算法系列】KMP算法介绍及实现(c++ &amp;&amp; java)

KMP算法如果理解原理的话,其实很简单. KMP算法简介 这里根据自己的理解简单介绍下. KMP算法的名称由三位发明者(Knuth.Morris.Pratt)的首字母组成,又称字符串查找算法. 个人觉得可以理解为最小回溯算法,即匹配失效的时候,尽量少回溯,从而缩短时间复杂度. KMP算法有两个关键的地方,1)求解next数组,2)利用next数组进行最小回溯. 1)求解next数组 next数组的取值只与模式串有关,next数组用于失配时回溯使用. 在简单版本的KMP算法中,每个位置 j 的 n

底层算法系列:Paxos算法

关于算法,面太广.本系列只研究实际应用中遇到的核心算法.了解这些算法和应用,对java码农进阶是很有必要的. 对于Paxos学习论证过程中,证实一句话:有史以来学习paxos最好的地方wiki:Paxos (computer science) 目录 1.背景 2.Paxos算法 3.Muti-Paxos算法 4.Muti-Paxos在google chubby中的应用 ===============正文分割线============================ 一.背景 Paxos 协议是一

算法系列之常用算法之一----分治算法

一.基本概念 在计算机科学中,分治法是一种很重要的算法.分治算法,字面上的解释是"分而治之",分治算法主要是三点: 1.将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----"分" 2.将最后子问题可以简单的直接求解----"治" 3.将所有子问题的解合并起来就是原问题打得解----"合" 这三点是分治算法的主要特点,只要是符合这三个特点的问题都可以使用分治算法进行解决(注意用词,是"

排序算法系列:插入排序算法

概述 直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表. – <大话数据结构> 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Coding-Naga 发表日期: 2016年3月24日 原文链接:http://blog.csdn.net/lemon_tree12138/article/details/50968422 来源:CSDN 更多内容:分类 &

排序算法系列:快速排序算法

概述 在前面说到了两个关于交换排序的算法:冒泡排序与奇偶排序. 本文就来说说交换排序的最后一拍:快速排序算法.之所以说它是快速的原因,不是因为它比其他的排序算法都要快.而是从实践中证明了快速排序在平均性能上的确是比其他算法要快一些,不然快速一说岂不是在乱说? 本文就其原理.过程及实现几个方面讲解一下快速排序算法. 版权声明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Coding-Naga 发表日期:2016年3月1日 链接:http://blog.csdn.n

查找算法系列之复杂算法:二叉排序树BST

前面总结了顺序查找,二分查找,分块查找算法,此篇博文将详解介绍二叉排序算法(Binary Sort Tree). 在介绍二叉排序算法之前,首先介绍什么事二叉排序树(BST). 首先从二叉树讲起: 1.二叉树的概念 二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作"左子树"(leftsubtree)和"右子树"(rightsubtree).二叉树常被用作二叉查找树和二叉堆或是二叉排序树.二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有

查找算法系列之复杂算法:哈希查找

眼下为止已经介绍了顺序查找.二分查找.分块查找.二叉排序树.见作者之前的文章: http://blog.csdn.net/u010025211/article/details/46635325 http://blog.csdn.net/u010025211/article/details/46635183 今天这篇博文将介绍哈希查找. 1.为什么要用哈希查找 之前所讲的查找方法都是须要比較待查找元素与线性表或者树中的元素才干实现. 这种时间复杂度为O(n)或者O(log n),那么有没有可能当给

由归并算法引申出来的其他问题

前言: 上一节刚讲过归并算法是排序算法中比较少见的一种时间复杂度为:θ(nlgn)的算法.而归并算法之所以快的原因在于它用了分治的思想,现实生活中有很多需要用到分治思想解决的问题,下面就举两个例子. 问题一: 给定一个整数数组和任意整数,找到数组中是否有两数的和等于给定的整数. 这个问题如果采用穷举法,则大致思路是这样:首先数组的第一个元素与数组剩下的元素相加,看是否有对应的结果.然后再数组第二个元素与除第一个元素和第二个元素本身之外的元素相加... 后面的操作一次类推.很容易得到时间复杂度为:

优化算法系列-模拟退火算法(1)——0-1背包问题

优化算法系列之模拟退火算法(1)--0-1背包问题 1问题描述 有一个窃贼在偷窃一家商店时发现有N件商品:第i件物品价值vi元,重wi磅,其中vi.wi都是整数.他希望带走的东西越值钱越好,但他的背包小,最多只能装下W磅的东西(W为整数).如果每件物品或被带走或被留下,小偷应该带走哪几件东西? 2解空间 设xi表示第i件物品的取舍,1代表取,0代表舍,搜索空间为n元一维数组(x1,x2,x3,.....,xn).因而解空间的取值范围可表示为(0,0,0,....,0),(0,0,0,......