首页 > 编程知识 正文

java二分查找算法代码,java归并排序代码

时间:2023-05-03 16:22:37 阅读:128874 作者:502

排序集和二分查找

1 .有序集合

二分搜索(也称为折半搜索)是一种非常重要和常用的搜索算法,多应用于平衡树和排序集合。 使用二分搜索是有前提条件的。 首先,确保集合时有排序集合,只能在排序集合中使用二分搜索。

各种各样的数据中,有些是天生就有顺序的。 例如,数字天生就具有自然排序的属性。 还有字符串等数据类型,也有一般的排序规则。 Java语言确定某种类型的数据是否具有可排序的属性,通常看其本身是否实现了Comparable接口(比较器接口)。 如果自定义数据类型实现了Comparable接口,则它也是具有自然排序的属性。

Comparable接口是需要实现“intcompareto(to )”抽象方法的通用接口,如果当前对象的值小于o,则返回负整数;否则返回正整数;如果两个值相等,则返回

在某些工具类容器中,为了避免接管通用接口,可以向容器中添加非Comparable实现类型,但必须添加定义了o1和o2比较规则的外部比较器Comparator对象这两种方法都确保自定义类型具有排序属性。

2 .二分搜索

二分搜索的思路非常简单,在一个序列的一半处开始搜索,根据比较的大小决定是向左还是向右继续搜索。 使用二分搜索算法时,通常需要定义三个比较索引,以限制搜索中的比较范围。

1 .左索引。 位于序列的最小元素中。

2 .权限索引。 位于数组的最大元素中。

3.middle索引,序列的中间位置。

的目标值target始终与middle进行比较,如果target大于middle,则left索引移动到middle 1,然后middle索引移动到(left right )/2。

如果target小于middle,则right索引移动到middle-1,然后middle索引移动到(左右)/2。 如果左边缘索引大于右边缘,则搜索结束。 如果搜索结束后在规则集合中找不到target值,则表明该集合中没有target值,如下图所示。

二分搜索算法

在Java中设计排序集合时,可以使用二分查找算法。 我们不需要从头设计全新的线性集合,可以在ArrayList的基础上改造为排序集合,添加二分搜索方法。 由于ArrayList本身不是排序集合,因此需要覆盖它的add方法来确保进入容器的数据有序。 示例代码如下。

改造后的SortList变成了自然的排序集合。 可以随机生成一些数据,以测试经过修改的SortList是否可以自动对元素进行排序,以及新添加的二分查找方法是否可以找到所需的数据。

执行结果:

上述例子的运行结果可以验证我们改造的排序集合是有效的(可以自己添加功能测试用例,验证代码的健壮性)。 您也可以自定义几个类,以查看修改后的SortList是否有效。 以下示例创建了一个学生成绩班TestScores,用于定义比较规则。 在测试中,将多个学生的成绩放入SortList中,调查是否能取得自动排序的效果。

执行结果:

从运行结果来看,取得了我们期望的效果。 另外,利用findInsertIndex法可以实现一些统计效果。

虽然Java中存在类似的排序集合(TreeMap、TreeSet等),但是对于二分搜索这样的基础算法,还是需要学习。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。