本文参考《数据结构、算法与应用C++语言描述》所写
本人第一篇文章用来总结第二章的内容,第一章就是一些基本的知识所以没有进行汇总
废话不多说开始写
一、首先是空间复杂度
1、指令空间:编译之后的程序指令所需要的存储空间。
2、数据空间:所有常量和变量值所需要的存储空间。(简而言之就是我们定义变量和常量在计算机中所站的空间大小即字节数,并且在C++中需要注意平台之间的可移植性)。
3、环境栈空间用来保存暂停的函数和方法在恢复运行时所需要的信息。
然后举例几个查找
1、顺序查找
好像不行我的图片太大了大家自己搜索就行了
然后就是他的递归算法
2、多项式计算
以及用Horner法则的多项式计算
用到了P<x> = (…(c<n>*x+c<n-1>)*x+c<n-2>)*x+c<n-3>*x…)*x + c<0>来简化算法(减少运算次数)
3、名次计算
以及利用附加数组的计数排序。
4、选择排序
5、冒泡排序
6、在一个有序数组中插入一个元素
7、原地重排数组元素。
8、及时终止的选择排序
9、插入排序
template<class T>
void matrixAdd(T ** a, T **b, T **c, int numberOfRows, int numberOfColumns) {
for (int i = 0; i < numberOfRows; i++)
{
for (int j = 0; j < numberOfColumns; j++)
{
c[i][j] = a[i][j] + b[i][j];
}
}
}
在这个程序中如何利用该函数来进行运算呢?我遇到这个难题了因为一般的函数数组定义为
//template<class T>
//void selectionSort(T a[], int n)
而这个是二维数组的定义要利用该函数只能定义一个动态的二维数组才行
int **a = new int* [m] //分配一个指针数组,将其首地址保存在a中 、
for(int i = 0; i < m; i++) //为指针数组的每个元素分配一个数组
a[i] = new int [n];
相当于产生了一个二维数组 a[m][n]了
静态声明的数组可以有公式(假设也是m行n列)
b[i][j] = b[i*n +j]
这是因为数组b是连续的一片内存,而动态声明的数组任意的a[k]都是一个int*类型,即一个地址,所以只能a[i][j]或者*(*(a+i) + j)来访问数组的元素,而不能a[i*n + j]使用。
动态声明的数组,使用后需要释放内存。
for(int i = 0; i < m; ++i)
delete []a[i];
delete []a;
来源:https://www.cnblogs.com/boluo007/p/6755540.html
一下我补充一下我自己的程序
int main(){
const int numberOfRows = 2, numberOfColumns = 6;
int **a = new int *[6];
int **b = new int *[6];
int **c = new int *[6];
for (int i = 0; i < numberOfRows; i++) {
a[i] = new int[numberOfColumns];
b[i] = new int[numberOfColumns];
c[i] = new int[numberOfColumns];
}
for (int i = 0; i < numberOfRows; i++)
{
for (int j = 0; j < numberOfColumns; j++)
{
a[i][j] = 1;
b[i][j] = 1;
}
}
matrixAdd(a, b, c, numberOfRows, numberOfColumns);
using std::cout;
using std::endl;
for (int i = 0; i < numberOfRows; i++)
{
for (int j = 0; j < numberOfColumns; j++)
{
cout << c[i][j] << endl;
}
}
delete []c[6];
delete []a[6];
delete []b[6];
return 0;
}
OK 今天就先写到这里第二章的大概内容就这么多了