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

一、数组

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值