不少开发者都知道“程序=数据结构+算法”这个著名的公式,单曲并不真正明白算法的定义或概念。究竟什么是算法呢?从字面意义上理解,算法即用于计算的方法,经过这种方法能够达到预期的计算结果。java
一个典型的算法通常均可以从中抽象出5个特征:又穷性、确切性、输入、输出和可行性。下面详细分析这5个特征。算法
算法是一门古老且庞大的学科,随着历史的发展,演化出多种多样的算法。按照不一样的应用和特性,算法能够分为不一样的类别。编程
按照算法的应用领域,即解决的问题,算法能够分为基本算法、数据结构相关的算法、几何算法、图论算法、规划算法、数值算法、数值分析算法、加密/解密算法、排序算法、查找算法、并行算法和数论算法等。数组
按照算法结果的肯定性来分类,算法能够分为肯定性算法和非肯定性算法。数据结构
按照算法的思路来分类,算法能够分为递推算法、递归算法、穷举算法、贪婪算法、分治算法、动态规划算法和迭代算法等多种算法。性能
数据结构是数据的组织形式,能够用来表征特定的对象数据。在计算机程序设置中,操做的对象是各式各样的数据,这些数据每每拥有不一样的数据结构,如数组、结构体、联合、指针和链表等。由于不一样的数据结构所采用的处理方法不一样,计算的复杂度也不一样,因材算法每每依赖于某种数据结构。也就是说,数据结构的算法实现的基础。(程序=数据结构+算法)加密
数据结构spa
流程图是一种图形表示算法流程的方法,其由一些图框和流程线组成。其中,图框标识各类操做的类型,图框中的文字和符号标识该操做的内容,流程线表示操做的前后次序。图框以下:指针
在实际使用中,通常采用以下三种流程结构。code
顺序结构是最简单 的一种流程结构,简单的一个接着一个的进行处理,通常来讲,顺序结构数和于简单的算法。
分支结构经常使用语根据某个条件来决定算法的走向,以下所示。这里首先判断条件P,若是P成立,则执行B;否者执行A,而后在继续下面的算法。分支结构有時也称为条件结构。
通常来讲,采用上述三种流程结构,能够完成全部的算法任务。经过合理安排流程结构,能够构成结构化的程序,这样便于算法程序的开发和交流。
算法其实就是解决问题的一种方法,一个问题的解决每每能够采用多种方法,但每种方法所用的时间和获得的效果每每是不同的。算法的一个重要任务即是找到合适的、效率最高的解决问题的方法,即最好的算法。从理论上来说,这就须要对算法的性能有一个合理的评论。一个算法的优劣每每经过算法复杂度来衡量,算法复杂度包括时间复杂度和空间复杂度两个方面。
时间复杂度即一般所说的算法执行所须要耗费的时间,时间越短,算法越好。一个算法执行的时间每每没法精确估计,一般须要在实际的计算机中运行才可以知道。可是,也能够对算法的代码进行估计,而获得算法的时间复杂度。
空间复杂度是指算法程序在计算机中执行所消耗的存储空间。空间复杂度能够分为以下两个方面。
1)程序保存所须要的存储空间,即程序大小。
2) 程序在执行中所须要小号的存储空间资源,如程序在执行过程当中的中间变量等。
通常来讲,程序的大小越小,执行过程当中消耗的资源越少,这对程序就越好。
public static void main(String[] args) { /** * 使用while循环来计算1+2+3+....+100的值 */ int current= 1;//从1开始累加 int total = 0;//累加数 while (current<=100){ total+=current; current++; } System.out.println(total); }
效果以下:
5050
public static void main(String[] args) { /** * 将ASCII码位于32~126之间的95个字符显示在屏幕上,为了美观,要求小于100的码值前填充一个0,每行打印8个字符。 */ String temp = ""; for (int i = 32; i <= 126; i++) { temp = i<100?("0"+i):(i+""); System.out.print(temp+ "=" +(char) i+" "); if ((i-31)%8 ==0){ System.out.println("\n"); } }
效果以下:
032= 033=! 034=" 035=# 036=$ 037=% 038=& 039=' 040=( 041=) 042=* 043=+ 044=, 045=- 046=. 047=/ 048=0 049=1 050=2 051=3 052=4 053=5 054=6 055=7 056=8 057=9 058=: 059=; 060=< 061== 062=> 063=? 064=@ 065=A 066=B 067=C 068=D 069=E 070=F 071=G 072=H 073=I 074=J 075=K 076=L 077=M 078=N 079=O 080=P 081=Q 082=R 083=S 084=T 085=U 086=V 087=W 088=X 089=Y 090=Z 091=[ 092=\ 093=] 094=^ 095=_ 096=` 097=a 098=b 099=c 100=d 101=e 102=f 103=g 104=h 105=i 106=j 107=k 108=l 109=m 110=n 111=o 112=p 113=q 114=r 115=s 116=t 117=u 118=v 119=w 120=x 121=y 122=z 123={ 124=| 125=} 126=~
public static void main(String[] args) { /** * 使用for循环的嵌套,打印出九九乘法表 */ for (int i = 1; i <= 9 ; i++) { for (int j = 1; j <= i ; j++) { System.out.print(j+"*"+i+"="+i*j+"\t"); } System.out.println(""); } }
效果以下:
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81