1.1基础编程模型

版权声明:如需转载,请写明出处 https://blog.csdn.net/weixin_43113679/article/details/87285091

学编程肯定要学点算法,我就选了《算法》第四版作为自己学算法的开头,虽然在学校里学数据结构,但是还是太浅了,整理一些自己可能会需要的算法程序。

一、典型的数组处理代码

任务 实现(代码片段)
找出数组中最大的元素 double max = a[0];
for (int i = 1; i < a.length; i++)
  if (a[i] >max) max = a[i];
计算数组元素的平均值 int N = a.length;
double sum = 0.0;
for (int i = 0; i < N; i++)
  sum += a[i];
double average = sum / N;
复制数组 int N = a.length;
double b = new double[N]
for (int i = 0; i < N; i++);
  b[i] = a[i];
颠倒数组元素的顺序 int N = a.length;
for (int i = 0; i < N/2; i++)
{  double temp = a[i];
   a[i] = a[N-i-1];
   a[N-i-1] = temp;
}
矩阵相乘(方阵)
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];
}

二、初步介绍递归
  编写递归代码最重要的有三点:

  1. 递归总有一个最简单的情况——方法的第一条语句总是一个包含return的条件语句。
  2. 递归调用总是去尝试去解决一个规模更小的问题,这样递归才能收敛到最简单的情况。
  3. 递归调用的父问题和尝试解决的子问题之间不应该有交集。

下面用二分法查找的递归实现来看一下(数组a是有序的)


	public  static int rank(int key,int[] a){
		return rank(key, a, 0, a.length);
	}
	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;
	}
	

在上面的代码中,两个子问题各自操作的数组部分是不同的,

警告:
  违背其中任意一条都有可能得到错误的结果或是低效的代码

三、格式化输出

System.out.printf("%.2f\n","想转成前面参数样的数");

第一个参数:%必须加,.2代表是小数点后2位有效数字,\n代表换行

数据类型 转换代码 举例 格式化字符串举例 转换后输出的字符串
int d 512 “%14d”
"%-14d"
"           512"
"512           "
double f
e
1595.1680010754388 “%14.2f”
"%.7f"
"%14.4e"
"          1595.17"
”1595.1680011"
"  1.5952e+03"
String s "Hello,World" “%14s”
"%-14s"
"%-14.5s"
" Hello,World"
"Hello,World "
"Hello     "

四、需要的扩展库
  如果你没系统的学过java那你可以按教程来安装需要扩展的库,如果学过我想你看到它扩展的库的时候就已经知道怎么用java现有的库来代替了,所以看个人情况。

猜你喜欢

转载自blog.csdn.net/weixin_43113679/article/details/87285091