JAVA 基础算法(查找、排序)

目录

一、查找算法

1.顺序查找(线性查找)

二、排序算法

1.冒泡排序

2.直接选择排序 

3.插入排序

4.直接插入排序

 5.二分插入排序(折半插入排序)


一、查找算法

1.顺序查找(线性查找)

依据数组的下标按顺序进行查找,然后返回数组下标。对于数据量较小的情况,比较适用。但是如果数据量较大,花费的时间就比较多。

2.二分查找
二分查找 Binary Search

二分查找的使用,要有一个前提条件:要查找的数必须在一个有序数组里。在这个前提下,取中间位置数作为比较对象:

  • 若要查找的值和中间数相等,则查找成功。
  • 若小于中间数,则在中间位置的左半区继续查找。
  • 若大于中间数,则在中间位置的右半区继续查找。

不断重复上述过程,直到查找成功或者查找区域变为 0,查找失败。

二、排序算法

1.冒泡排序

在这里插入图片描述

按从小到大排序举例:

        1.比较相邻的两个元素,若前边的元素大于后边的元素则交换。

        2.每一对相邻元素都要进行比较。每一个轮次,将最大的排到最后。

        3.针对剩余的元素,重复上述步骤

        4.没有元素交换,完成排序。

2.直接选择排序 

选择排序

  1. 第一趟,程序将记录定位在第一个数据上,拿第一个数据依次和后面的数据进行比较,如果第一个数据大,交换,依次类推。经过第一趟比较,这组数据中最小的数据被选出来,排在第一位。
  2. 第二趟,程序将记录定位在第二个数据上,拿第二个数据依次和后面的数据比较,同样地,第二个数据大就交换。经过第二次比较,这轮最小的书被选出来,放在了第二位。

这样经过n-1次比较,这组数据就会变得有序。

3.插入排序

插入排序是一种简单直观的排序算法,其核心思想是将未排序的元素逐个插入到已排序的序列中,直到所有元素都被插入完成。插入排序可以分为两种形式:直接插入排序和二分插入排序(也称为折半插入排序)。

插入排序的定义:

插入排序算法:是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素

插入排序的思路:

  • 默认从第2个数据开始比较。如果第2个数据比第1个小,则交换。
  • 然后在用第3个数据比较,如果比前面小,则插入。否则,退出循环。
  • 说明:默认将第1数据看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则插入(交换)。否则退出。

4.直接插入排序

直接插入排序的过程如下:

  1. 从未排序序列中取出一个元素,将其与已排序的序列比较,找到合适的插入位置。
  2. 如果比较的元素大于待插入元素,则将比较元素向后移动一个位置,为待插入元素腾出空间。
  3. 重复步骤2,直到找到插入位置为止。
  4. 将待插入元素插入到找到的位置。

 算法实现:
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:

①. 从第一个元素开始,该元素可以认为已经被排序
②. 取出下一个元素,在已经排序的元素序列中从后向前扫描
③. 如果该元素(已排序)大于新元素,将该元素移到下一位置
④. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⑤. 将新元素插入到该位置后
⑥. 重复步骤②~⑤

 5.二分插入排序(折半插入排序)

二分插入排序的特点是:

  • 稳定性:相等元素的相对位置不会改变。
  • 时间复杂度:最好情况下(已排序序列),时间复杂度为O(nlogn),最坏情况下(逆序序列),时间复杂度为O(n^2)。
  • 空间复杂度:O(1)。

实现:

 

总结:
直接插入排序和二分插入排序的区别在于查找插入位置的方式不同,二分插入排序在查找插入位置时利用了二分查找的思想,从而提高了查找效率。但是对于小规模的数据排序,两种算法的差异并不明显。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值