算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
讨论内容不说明,仅提供相应的程序。
2.1:归并插入排序θ(nlgn)
void mergeInsertionSort(int a[], int l, int r, int k)
{
int m;
if(r-l+ > k)
{
m = (l + r) / ;
mergeInsertionSort(a, l, m, k);
mergeInsertionSort(a, m+, r, k);
merge(a, l, m, r);
}
else if(l < r)
insertSort(a, l, r);
} void insertSort(int a[], int l, int r)
{
int i, j, key;
j = l;
for(i=l+; i<=r; i++)
if(a[i] < a[j]) j = i;
if(j > l)
{
key = a[j];
a[j] = a[l];
a[l] = key;
}
for(i=l+; i<=r; i++)
{
key = a[i];
for(j=i-; key<a[j]; j--) a[j+] = a[j];
a[j+] = key;
}
} void merge(int a[], int l, int m, int r)
{
int i, j, k;
int n1 = m - l + ;
int n2 = r - m;
int lArray[n1+], rArray[n2+];
int max = ; for(i=; i<n1; i++) lArray[i] = a[l+i];
for(i=; i<n2; i++) rArray[i] = a[m+i+];
lArray[n1] = max;
rArray[n2] = max;
i = ;
j = ;
for(k=l; k<=r; k++)
{
if(lArray[i] <= rArray[j])
{
a[k] = lArray[i];
++i;
}
else
{
a[k] = rArray[j];
++j;
}
}
}
2.2:冒泡排序
void bubbleSort(int a[], int n)
{
int i, j, tmp; for(i=; i<n-; i++)
for(j=n-; j>i; j--)
if(a[j] < a[j-])
{
tmp = a[j];
a[j] = a[j-];
a[j-] = tmp;
}
}
2.3: 多项式计算方法(θ(n))
int horner(int a[], int x, int n)
{
int i, sum=a[n-];
for(i=n-; i>=; i--) sum = a[i] + x * sum;
return sum;
} int polynomial(int a[], int x, int n)
{
int i, xArray[n], sum=;
xArray[] = ;
for(i=; i<n; i++) xArray[i] = x * xArray[i-];
for(i=; i<n; i++) sum = sum + a[i] * xArray[i];
return sum;
}
2.4:计算数列的逆序θ(nlgn)
int mergeCount(int a[], int l, int r)
{
int m;
if(l < r)
{
m = (l + r) / ;
return mergeCount(a, l, m) + mergeCount(a, m+, r) + merge(a, l, m, r);
}
return ;
} int merge(int a[], int l, int m, int r)
{
int i, j, k, cnt=;
int n1 = m - l + ;
int n2 = r - m;
int lArray[n1+], rArray[n2+];
int max =; for(i=; i<n1; i++) lArray[i] = a[l+i];
for(j=; j<n2; j++) rArray[j] = a[m++j];
lArray[n1] = max;
rArray[n2] = max;
i = ;
j = ;
for(k=l; k<=r; k++)
if(lArray[i] <= rArray[j])
{
a[k] = lArray[i];
++i;
}
else
{
a[k] = rArray[j];
cnt += (m + j - k + );
++j;
}
return cnt;
}
算法导论(第三版)Problems2(归并插入排序、数列逆序计算)的更多相关文章
- 算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)
		
关于练习程序的说明参见置顶的那篇. 2.1-1: 31 41 59 26 41 58 31 41 59 26 41 58 31 41 59 26 41 58 26 31 41 59 41 58 26 ...
 - 算法导论(第三版)Exercises2.3(归并排序、二分查找、计算集合中是否有和为X的2个元素)
		
2.3-1: 3 9 26 38 41 49 52 59 3 26 41 52 9 38 49 57 3 41 52 26 38 57 9 49 3 41 52 26 38 ...
 - python经典面试算法题1.1:如何实现链表的逆序
		
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.1 如何实现链表的逆序 [腾讯笔试题] 难度系数:⭐⭐⭐ ...
 - 算法导论 第三章 and 第四章
		
第三章 渐进的基本O().... 常用函数 % 和 // 转换 斯特林近似公式 斐波那契数 第四章 分治策略:分解(递归)--解决(递归触底)--合并 求解递归式的3种方法: 1:代入法(替代法): ...
 - 算法导论-求(Fibonacci)斐波那契数列算法对比
		
目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 ...
 - 算法导论--装备线调度(升序&&降序输出)
		
题意就先不用讲了吧,感觉自己还没有掌握核心的东西. //心得 //如何保持路径,递归的实现 #include<iostream> #include<cstdio> #inclu ...
 - 算法导论--最小生成树(Kruskal和Prim算法)
		
转载出处:勿在浮沙筑高台http://blog.csdn.net/luoshixian099/article/details/51908175 关于图的几个概念定义: 连通图:在无向图中,若任意两个顶 ...
 - 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)
		
在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...
 - 重读《学习JavaScript数据结构与算法-第三版》-第2章 ECMAScript与TypeScript概述
		
定场诗 八月中秋白露,路上行人凄凉: 小桥流水桂花香,日夜千思万想. 心中不得宁静,清早览罢文章, 十年寒苦在书房,方显才高志广. 前言 洛伊安妮·格罗纳女士所著的<学习JavaScript数据 ...
 
随机推荐
- 从sockaddr中取得Ip地址和端口号
			
在socket编程中,服务器端accept()等待一个客户端的连接,当连接成功后,accept拷贝客户端的地址信息到sin_addr里面,我们如何从sin_addr取得此客户端的Ip地址和端口号呢? ...
 - STL之hash_set和hash_map
			
Contents 1 hash_set和hash_map的创建与遍历 2 hash_set和hash_map的查找 3 建议 一句话hash_set和hash_map:它们皆由Hashtable(St ...
 - angularjs手动解析表达式($parse)
			
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
 - yii cgridview 如何显示图片
			
发布的新闻或介绍里有图片,图片存的是Url地址,通过yii的cgridview,默认是数据库里存的啥就显示啥,如何把url地址转为图片?直接上代码 <?php $data = $model-&g ...
 - Configuring Network Configuration-RHEL7
			
1.查看网络状态systemctl status NetworkManager You can use the systemctl status NetworkManager command to ...
 - 秒味课堂Angular js笔记------Angular js中的工具方法
			
Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...
 - NotImplementedException未实现该方法或操作
			
使用DevExpress为控件CheckedListBoxControl绑定DataSource时,引发异常“NotImplementedException未实现该方法或操作”,代码如下: this. ...
 - 执行start-dfs.sh后,datenode没有启动
			
Hadoop2.2.0启动异常 – Incompatible clusterIDs 2014年08月29日 ⁄ 综合 ⁄ 共 2399字 ⁄ 字号 小 中 大 ⁄ 评论关闭 今天启动Hadoop2.2 ...
 - UITableViewCell实现3D缩放动画
			
gif效果图: 代码部分: import UIKit class TableViewController: UITableViewController { override func viewDidL ...
 - Python 快捷键
			
Ctrl + [ .Ctrl + ] 缩进代码Alt+3 Alt+4 注释.取消注释代码行Alt+5 Alt+6 切换缩进方式 空格<=>TabAlt+/ 单词完成,只要文中出现过,就可以 ...