常见算法(基本查找、二分查找、分块查找冒泡、选择、插入、快速排序和递归算法)

一、常见算法-01-基本、二分、插值和斐波那契查找

1、基本查找/顺序查找

需求1:定义一个方法利用基本查找,查询某个元素是否存在

数据如下:{131,127,147,81,103,23,7,79}

需求2:定义一个方法利用基本查找,查询某个元素在数组中的索引

要求:不需要考虑数组中元素是否重复

需求3:定义一个方法利用基本查找,查询某个元素在数组中的索引

要求:需要考虑数组中元素是否重复

数据如下:{131,127,147,81,103,23,7,79,81}

2、二分查找/折半查找

  • 前提条件:数组中的数据必须是有序的
  • 核心逻辑:每次排除一般的查找范围

练习 

需求:定义一个方法利用二分查找,查询某个元素在数组中的索引

数据如下: {7,23,79,81,103,127,131,147}

 

总结:

3、插值查找(二分查找改进)

 

4、斐波那契查找(二分查找改进)

5、总结:

 

二、常见算法-02-分块,分块查找,哈希查找

1、分块查找 

⭐⭐练习 

分块查找
  核心思想:
       块内无序,块间有序
  实现步骤:
    1.创建数组blockArr存放每一个块对象的信息
    2.先查找blockArr确定要查找的数据属于哪一块
    3.再单独遍历这一块数据即可

2、扩展的分块查找(无规律的数据) 

3、扩展的分块查找(查找的过程中还需要添加数据) 

三、常见算法-03-冒泡排序和选择排序

1、冒泡排序

冒泡排序:相邻两个数据两两比较,小的放前面,大的放后面。

 

2、选择排序

选择排序:从0索引开始,拿着每一个索引商的元素跟后面的元素一次比较,小的放前面,大的放后面,一次类推。 

 

 

四、常见算法-04-插入排序和递归算法

1、插入排序

0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。
遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。
N的范围:0~最大索引

 

2、递归算法 

递归值得是方法中调用方法本身的现象。

递归算法的作用

  • 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

  • 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算

书写递归的两个核心:

  • 找出口:什么时候不再调用方法。

  • 找规则:如何把大问题变成规模较小的问题

递归的注意点:递归一定要有出口,否则就会出现内存溢出

练习——递归求和

需求:求1~100之间的和 

练习——递归求阶乘

 需求:用递归求5的阶乘,并把结果在控制台输出

5!= 5*4*3*2*1                100!= 100*99*98*97*96....*2*1;

五、常见算法-05-快速排序

练习——快速排序

第一轮:以e索引的数字为基准数,确定基准数在数组中正确的位置。
比基准数小的全部在左边,比基准数大的全部在右边。
后面以此类推。

//结果:1,2,3,4,5,6,7,8,9,10

 总结

六、Arrays 

 

1、Lambda表达式的标准格式

Lambda表达式是JDK8开始后的一中新语法形式。

         ( ) ->{   

                             

          }

  • ()对应着方法的形参
  • ->  固定格式
  • {}  对应着方法的方法体

函数式编程

函数式编程(Functional programming)是一种思想特点。
函数式编程思想,忽略面向对象的复杂语法,强调做什么,而不是谁去做。
而我们要学习的Lambda表达式就是函数式思想的体现。

2、总结:

1、Lambda表达式的基本作用?
                     简化函数式接口的匿名内部类的写法。
2、Lambda表达式有什么使用前提?
                     必须是接口的匿名内部类,接口中只能有一个抽象方法
3、Lambda的好处?
                      Lambda是一个匿名函数
                      我们可以把Lambda表达式理解为是一段
                      可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧
                      凑的代码风格,使Java语言表达能力得到了提升。 

3、Lambda表达式的省略写法

省略核心:可推导,可省略

  • 参数类型可以省略不写。
  • 如果只有一个参数参数类型可以省略,同时()也可以省略。
  • 如果Lambda表达式的方法体只有一行大括号,分号,return可以省略不写,需要同时省略。 

 七、五道算法题

练习1——Lambda表达式简化Comparator接口的匿名形式

定义数组并存储一些字符串,利用Arrays中的sort方法进行排序
要求:     按照字符串的长度进行排序,短的在前面,长的在后面。
                    (暂时不比较字符串里面的内容)

 练习2——按照要求进行排序

定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序
要求1:属性有姓名、年龄、身高。
要求2:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序。
(姓名中不要有中文或特殊字符,会涉及到后面的知识)

创建Text类

或者用

  练习3——不死神兔

有一个很有名的数学逻辑题叫做不死神兔问题,有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十二个月的兔子对数为多少? 

规律:从第三个数据开始,是前两个数据和                                                                                           (斐波那契数列)                                

 练习4——猴子吃桃子

有一堆桃子,猴子第一天吃了其中的一半,并多吃了一个!以后每天猴子都吃当前剩下来的一半,然后再多吃一个,第10天的时候(还没吃),发现只剩下一个桃子了,请问,最初总共多少个桃子?

练习5——爬楼梯

可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶。
如果这个楼梯有20个台阶,小明一共有多少种爬法呢?

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
算法赏析》课程介绍 “软件 = 算法 + 数据结构”,算法是软件的灵魂。在信息时代,计算思维是分析复杂工程问题的重要思维方式,计算机则是求解问题的重要工具。本课程以计算机经典问题求解为导向,通用算法思维和自动编程流程图培养为目标,引入经典算法,精心安排课程的理论教学和编程实践。本课程学习将有助于学员提高计算思维能力及算法思维的能力。 本课程主要讲授计算机问题求解的经典算法设计方法和算法复杂度分析方法,主要内容包括计算机概述、计算机系统的组成、信息化及指标体系、操作系统、程序设计语言、算法简介、数的表示及存储、数据结构简介及顺序结构和选择结构、循环结构、循环的嵌套、算法复杂度分析,枚举算法归与分治策略,归与迭代的思想、求最大值最小值、线性查找二分查找冒泡排序以及选择与交换排序插入和希尔排序。本课程除了强调经典的算法理论和模型,亦兼顾编程实践能力。力图使得学员面对复杂问题时,既能“想到”还能“做到”。 授课目标 培养算法思维,掌握枚举算法、分治策略、归与迭代、选择与交换排序等经典算法模型; 培养实践能力,掌握在存储空间和时间开销受限情况下的程序设计方法; 培养理论思维,掌握复杂问题的算法设计与分析方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值