算法导论(第三版)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数据 ...
随机推荐
- Trie和Ternary Search Tree介绍
Trie树 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie树与二叉搜索树不同,键不是直接保存在节 ...
- Android各种颜色dawable.xml中定义
< drawable name="white">#FFFFFF< /drawable>< !--白 --> < drawable name ...
- atitit。浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结
atitit.浏览器缓存机制 and 微信浏览器防止缓存的设计 attilax 总结 1. 缓存的一些机制 1 1.1. http 304 1 1.2. 浏览器刷新的处理机制 1 1.3. Expir ...
- 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题
[题意]有n个程序,分别在两个内核中运行,程序i在内核A上运行代价为ai,在内核B上运行的代价为bi,现在有程序间数据交换,如果两个程序在同一核上运行,则不产生额外代价,在不同核上运行则产生Cij的额 ...
- 各种乱码,编码问题设置方法整理(UTF-8)
一.tomcat中文乱码问题 打开tomcat安装目录,在conf文件夹中找到server.xml文件 ,找到 <Connector port="8009" protoc ...
- mysql存储过程controller的not found造成混乱的解决办法
打草稿 问题:对于select var1 into var2 ,单select的结果为空的时候(空的意思是没有找到数据,不是该值为null) ,会触发controller的not found 当游标 ...
- PHP FTP
安装 PHP 的 Windows 版本内置了对 FTP 扩展的支持.无需加载任何附加扩展库即可使用 FTP 函数. 然而,如果您运行的是 PHP 的 Linux 版本,在编译 PHP 的时候请添加 - ...
- dom方法读取xml(不常用)
Book.java package com.xml.demo; public class Book { private int id; private String name; private Flo ...
- java事件处理
1.ActionEven事件 文本框,按钮,菜单项,密码框,单选按钮都可以出发ActionEvent事件 使用 addActionListener(ActionListener listen1) 来注 ...
- python记录
1. 序列的分片操作:需要提供两个索引作为边界,第1个索引的元素包含在分片内,第2个索引的元素不包含在分片内. 为了能让分片部分能够包含列表的最后一个元素,必需提供最后一个元素的下一个元素所对应的索引 ...