1.查找的定义

查找是这样一个过程,即在某个项目组中寻找某一指定目标元素,或者确定该组中并不存在该目标元素。 对其进行查找的项目的组有时也成为查找池。

两种常见的查找方式:线性查找和二分查找。

为了能够查找某一对象,我们就必须将一个对象跟另一个对象进行比较。我们对这些算法的实现就是对某个Comparable对象的数组进行查找。因此,所涉及的元素实现了Comparable接口且彼此是可比较的。我们将在Searching类头中完成这一限制。

2.算法查找

2.1 线性查找

/**

* 线性查找 在没有找到之前 需要一直遍历

*

*@param data

*@param min

*@param max

*@param target

*@return

*/

public static > boolean linearSearch(T[] data,

int min, int max, T target) {

int index = min;

boolean found = false;

while (!found && index <= max) {

found = data[index].equals(target);

index++;

}

return false;

}

2.2 二分查找

/**

* 二分查找:二分查找需要实现数组列表有序,然后每次考察中间元素,排除一半,最好的方法是使用递归实现。

*@param data

*@param min

*@param max

*@param target

*@return

*

* 二分查找方法是递归实现的,如果没有找到目标元素,且有更多待查找数据,则该方法将调用自身,同时传递参数,

* 这些参数缩减了数组内可行候选项的规模。

*

* min和max索引用于确定是否还具有更多的待查找数据,这就是说,如果削减后的查找区间一个元素没有则该方法

* 不会调用其自身且返回一个false值。

*

*

*

*/

public static > boolean binarySearch(T[] data, int min, int max, T target) {

boolean flag= false;

int mid = (max+min)/2;

if(data[mid].compareTo(target)==0){

flag = true;

}else if(data[mid].compareTo(target)>0){//中间大于目标

if(min<=mid-1){

flag = binarySearch(data, min, mid-1, target);

}

}else if(data[mid].compareTo(target)<0){

if(mid+1<=max){

flag = binarySearch(data, mid+1, max, target);

}

}

return flag;

}

2.3 查找比较

线性查找,最好情形是目标元素刚好是我们考察项目组的第一个项目。最糟糕的情形是出现在目标不再该组的时候,且在我们确定它不在之前不得不考察每一个元素。算法的期望是n/2,因此线性查找算法具有线性时间复杂度O(n)。

二分查找,因为我们每比较一回我们就能够将剩余数据削减一半,所以我们可以更快的找到元素。最好的情况一次找到,最差是排除所有元素,我们不得不进行log2n 次比较。因此,找到位于该查找池中某一元素的预期情形是大约(log2n)/2次比较。

线性查找比较简单,编程调试更容易实现。

线性查找无需花费额外成本来排序该查找列表。

二分查找的复杂度是对数级的,这使得它对于大型查找池非常有效率。

3.排序简介

排序:基于某一个标准,将某一组项目按照某个规定顺序排列。

基于效率排序算法通常分为两类:顺序排序和对数排序。

顺序排序:它通常使用一对嵌套循环对n个元素进行排序,需要大约n2 次比较。

对数排序:它对n个元素进行排序大约需要nlog2n 次比较。

在n较小的时候,这两类算法之间几乎不存在任何实际差别。

4.泛型:补充资料

package ds.java.ch09;

import java.util.ArrayList;

import java.util.Collection;

import java.util.List;

/**

* @author LbZhang

* @version 创建时间:2015年11月19日 上午11:16:20

* @description 类说明

*

* 综合分析:

* extends 可用于的返回类型限定,不能用于参数类型限定。

* super 可用于参数类型限定,不能用于返回类型限定。

*

* 带有super超类型限定的通配符可以向泛型对易用写入,带有extends子类型限定的通配符可以向泛型对象读取.

*/

public class Genertic {

public static void main(String[] args) {

/**

* List extends Frut> 表示 “具有任何从Fruit继承类型的列表”,编译器无法确定List所持有的类型,

* 所以无法安全的向其中添加对象。可以添加null,因为null 可以表示任何类型。所以List 的add 方法不能

* 添加任何有意义的元素,但是可以接受现有的子类型List 赋值。

*/

List extends Fruit> felist = new ArrayList();

//flist.add(new Apple());

Fruit f = felist.get(0);

/**

* List super Fruit> 表示“具有任何Fruit超类型的列表”,列表的类型至少是一个 Fruit 类型,

* 因此可以安全的向其中添加Fruit 及其子类型。由于List super Fruit>中的类型可能是任何Fruit

* 的超类型,无法赋值为Fruit的子类型Apple的List.

*

*/

List super Fruit> fslist = new ArrayList();

fslist.add(new Apple());

//Fruit fs = fslist.get(0);

}

}

class Food {

}

class Fruit extends Food {

}

class Apple extends Fruit {

}

class RedApple extends Apple {

}

总结:

extends 可用于的返回类型限定,不能用于参数类型限定。

super 可用于参数类型限定,不能用于返回类型限定。

带有super超类型限定的通配符可以向泛型对易用写入,带有extends子类型限定的通配符可以向泛型对象读取。——《Core Java》

java 查找排序_数据结构(Java)——查找和排序(1)相关推荐

  1. Java冒泡,快速,插入,选择排序^_^+二分算法查找

    这段时间在学Java,期间学到了一些排序和查找方法.特此写来和大家交流,也方便自己的日后查看与复习. 1.下边是Java的主类: public class Get {public static voi ...

  2. java正则表达式 匹配()_学习Java正则表达式(匹配、替换、查找)

    import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public c ...

  3. java数组给名字排序_用Java给数组排序

    public class BubbleDemo { public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bu ...

  4. 数据结构折半查找例题_数据结构第9章例题与答案

    第九章  集合 一. 选择题 1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度asl为(    ).[北京航空航天大学 2000 一.8 (2分 ...

  5. Java数据结构第五版期末考试_数据结构(java)期末复习

    [单选题]多基因遗传病的发病风险与下列哪个因素无关 [单选题]一般手锯的往复长度不应小于锯条长度的( ). [判断题]机器上所有;零件都必须进行机械加工. [单选题]一般划线精度能达到( ). [填空 ...

  6. java 数据结构实例_数据结构(Java)——栈的实例

    惟大英雄能本色,是真名士自风流 --易中天(百家讲坛) 1.表达式的转换 1.1 中缀表达式转前缀表达式 中缀表达式转前缀表达式有许多的方式,有加括号去除法.语法树遍历法.堆栈处理法1. 测试程序的实 ...

  7. java字符串数组排序_在Java中对字符串数组进行排序

    允许用户使用字符串数组.他们可以向数组添加字符串,从数组中删除字符串,搜索数组中的字符串,最终他们将能够对数组进行排序.分类是搞砸我的原因.我尝试过几种不同的方法.第一种方法是将数组转换为ArrayL ...

  8. java util包排序_实现java.util.Comparator接口,对对象集合进行多属性组合排序

    Commons - BeanUtils 提供了很多功能,其中一个很有用的是对对象集合进行排序,如Collections.sort(peoples, new BeanComparator("a ...

  9. 数据结构折半查找例题_数据结构查找习题及答案

    第九章 查找 一. 选择题 1. 若查找每个记录的概率均等, 则在具有 n 个记录的连续顺序文件中采用顺序查找法查找一 个记录,其平均查找长度 ASL 为 (    ) . A . (n-1)/2   ...

最新文章

  1. 现在的Android程序员为什么会感到焦虑?焦虑的源头在哪里?该怎么去缓解焦虑呢?——没有无中生有的贩卖焦虑,只有你的挣扎和不甘。
  2. Java对二叉树的操作
  3. MapReduce-Reduce端join操作-Map阶段代码
  4. lenze变频器怎么更改地址_英威腾变频器GD300维修
  5. 每日一笑 | 实名举报校长拿两份工资!
  6. html中怎么自动获得搜索文本框的光标焦点
  7. orcale用户名的创建及权限设置
  8. Linux 进程间通信 - 信号量
  9. JavaScript学习(八十七)—流程控制语句的总结,超级详细!!!
  10. python/数据库操作补充—模板—Session
  11. 算法分析与设计 八大排序算法
  12. Anaconda修改国内镜像源
  13. Dedecms信息泄露漏洞(CVE-2018-6910)
  14. 【Web应用开发】实验三:利用CSS设置网页内容样式
  15. 怎么做 HDFS 的原地平滑缩容?
  16. 利用pandas实现json文件转化成csv文件
  17. 嵌入式操作系统课程作业之Write OS
  18. 接招吧,最强“高并发”系统设计 46 连问,分分钟秒杀一众面试者
  19. Logistic Regression - Decision boundary
  20. MDICT的100G的辞典资源

热门文章

  1. 推荐系统之美团在CTR模型优化的实践
  2. 哈佛大学推荐:让自己变幸福的20件小事(值得收藏)
  3. 一个年轻人为什么毫无欲望?
  4. sklearn中的train_test_split函数
  5. 数据挖掘之CTR预估(FM算法)
  6. 封条格式用word怎么打_汽车密封条保养膏怎么用?大师来教你正确方法
  7. idle显示出错信息 python_Life is short,you need Python——Python入门
  8. eclipse项目如何变成web项目_IntelliJ IDEA 部署 Web 项目,终于搞懂了!
  9. sklearn 3.随机森林(菜菜课程)
  10. TP5项目lnmp环境500错误