《算法》笔记---第一章 基础

一、数组

1、颠倒数组元素的顺序

int N = a.length;
for(int i = 0 ; i < N/2;i++)
{
	double temp = a[i];
	a[i] = a[N-1-i];
	a[N-i-1] = temp;
}

2.矩阵相乘(方阵)
a[][] * b[][] = c[][]

int N = a.length;
double [][] c = new double[N][N];
for(int i = 0;i<N;i++)
	for(int j = 0;j<N;j++)
	{//计算行i和列j的点乘
		for(int k = 0;k<N;k++)
			c[i][j] +=a[i][k]*b[k][j];
	}

3.复制数组
注:数组名表示的是整个数组——如果我们将一个数组变量赋予另一个变量,那么两个变量将会指向同一个数组。例如:
《算法》笔记---第一章 基础
输出结果为:
《算法》笔记---第一章 基础
这种情况叫做“起别名”,如果要复制数组的话,那么应该声明、创建并初始化一个新的数组,然后将原数组中的元素值挨个赋值到新数组。如下面的代码所示。

int N = a.length;
doble [] b = new double[N];
for(int i = 0;i<N;i++)
	b[i] = a[i];

二、静态方法

1.判定一个数是否是素数

public static boolean isPrime(int N)
{
	if(N < 2) return false;
	for(int i = 2; i*i <=N;i++)
		if(N % i == 0) return false;
	return ture;
}

2.计算平方根(牛顿迭代法)

public static double sqrt(double c)
 {
	if(c<0) return Double.NaN;
	double err = 1e-15;
	double t = c;
	while (Math.abs(t - c/t)>err * t)
			t=(c/t + t) /2.0;
	return t;
}

3.计算调和级数

public static double H(int N)
{
	double sum = 0.0;
	for(int i = 1; i<=N;i++)
		sum += 1.0/i;
	return sum;
}

4.二分查找的递归实现

public static int rank(int key , int[] a)
{return rank(key,a,0,a.length - 1);}

public static int rank(int key , int[] a , int lo, int hi)
{//如果key存在于a[]中,它的索引不会小于lo且不会大于hi
	if(lo>hi) return - 1;
	int mid = lo + (hi - lo)/2;
	if(key<a[mid])  return rank(key,a,lo,mid - 1);
	else if(key>a[mid])  return rank(key,a,mid + 1,hi);
	else     return mid;
	
}

三、本书中用到的一些API

《算法》笔记---第一章 基础
《算法》笔记---第一章 基础
《算法》笔记---第一章 基础

《算法》笔记---第一章 基础《算法》笔记---第一章 基础 Nine Suns 发布了3 篇原创文章 · 获赞 0 · 访问量 56 私信 关注
上一篇:oracle 某一条数据删不掉解决办法


下一篇:王道机试指南题解(C/C++版)