您的位置:首页 > 编程语言

1.1基础编程模型

2019-02-14 19:12 50 查看
版权声明:如需转载,请写明出处 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

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

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现有的库来代替了,所以看个人情况。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: