算法导论(第三版)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数据 ...
随机推荐
- 【剑指offer】链表倒数第k个节点
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25662121 在Cracking the Code Interview上做过了一次,这次在 ...
- shell 判断文件、目录是否存在
shell判断文件是否存在 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. m ...
- vipw和vigr命令
Modifying the Configuration Files To add user accounts, it suffices that one line is added to /etc/p ...
- activeMQ总结
队列模式和发布订阅模式的区别 topic只有所有订阅者都消费了,这个消息才会消失.只要有一个订阅者没有消费(持久化模式),这个消息就会存在.订阅者下线然后上线也会读取到这个消息.而且队列的话,消费能力 ...
- GetJsonByDataTable
public string getJsonByModel(DataTable dt) { StringBuilder nsb = new StringBuilder(); ; i < dt.Ro ...
- 马士兵SVN.
下载 服务端:VisualSVN Server 和客户端:TortoiseSVN cmd,并cd 到 VisualSVN Server安装目录下的bin目录. 新建库: svnadmin create ...
- 微软分布式缓存 appfabric
appfabric为微软自家产的分布式缓存解决方案,随dotnet4.0一起发布.目前版本为1.1
- 用POP动画引擎实现衰减动画(POPDecayAnimation)
效果图: #import "ViewController.h" #import <POP.h> @interface ViewController () @end @i ...
- Php 常用类
图表库下面的类库可以让你很简单就能创建复杂的图表和图片.当然,它们需要GD库的支持.pChart - 一个可以创建统计图的库.Libchart - 这也是一个简单的统计图库.JpGraph - 一个面 ...
- 武汉科技大学ACM :1006: 华科版C语言程序设计教程(第二版)习题7.15
Problem Description 输入n个字符串(n<=100),输出其中最长的串,如果有多个则取最先找到的那一个. Input 多组测试数据. 每组测试数据第一行包含一个整数n,表示一共 ...