数组常见算法代码总结

数组:是一种数据结构,用于存储固定数量的相同类型的元素。这些元素在内存中连续存储,可               以 通过索引访问。索引是一个整数,表示数组中每个元素的位置,从0开始。

目录

1、数组排序(优化)

2、无序数组查找

3、有序数组查找

4、数组乱序

5、数组旋转


1、数组排序(优化)

使用Arrays工具类排序

    基本思路:Arrays.sort()方法会根据传入数组的类型(基本类型或对象类型)来选择合适的排序                       规 则。但是,只能进行升序排列。需要注意的是,对数组排序实际上修改了数组本                         身。

冒泡排序

    基本思路:

    (1)、比较相邻的元素,如果第一个比第二个大,则交换位置。

    (2)、对每一个相邻元素重复上述步骤,从开始第一对到结尾的最后一对。这步做完后,最大的元素会被放置到数列的最后。

   (3)、针对所有的元素重复上述步骤,除了最后一个。

   (4)、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止,也就是,该数列已经排序完成。

    通常使用循环结构来实现这个算法,外层循环控制所有的遍历回合,总共比较N-1轮,内层循环负责每一回合的相邻元素比较和交换,每轮比较N-1-i次。如果在某一回合中没有发生交换,说明数列已经排序完成。

2、无序数组查找

遍历数组查找

基本思路:

    按照数组中的元素顺序,逐一访问并检查每个元素,将数组中的每一个元素与指定元素进行比较,从而确定数组中是否存在指定元素。

整型数组

字符串数组

双指针遍历查找

基本思路:

    利用两个指针在数组或链表等数据结构上进行同步移动,通过两个下标,分别从数组的头部和尾部同时对该无序数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。

整型数组

字符串数组

使用Arrays工具类的binarySearch()方法查找

基本思路:

    通过调用Arrays.binarySearch()的方法进行查找,该方法是基于二分查找法实现的,所以数组必须处于有序状态,则需先排序,再查找。

3、有序数组查找

二分查找

基本思路:

1、确定搜索范围的起始和结束索引,即数组的开始和结束位置。

2、计算中间元素索引,通过取起始和结束索引的平均值(向下取整)计算出中间元素的索引。

3、比较目标元素与中间元素,如果两者相等,则搜索成功,返回中间元素的索引。

4、缩小搜索范围,如果中间元素大于目标元素,当前数组的前半部分作为新的搜索数组,因为后半部分的所有元素都大于目标元素,他们全部被排除了;如果中位元素小于目标元素,当前数组的后半部分作为新的搜索数组,因为前半部分的所有元素都小于目标元素,他们全都被排除。

5、重复过程:不断重复上述过程,直到找到目标元素或搜索范围为空(即开始索引大于结束索引)。如果搜索范围为空,说明目标元素不存在于列表中。

4、数组乱序

基本思路:

    将数组元素的排列顺序随机打乱,使得元素的位置不再保持原有的顺序。假设有一组等待乱序的数组a,从a中随机选取一个未乱序的元素,将该元素与数组p中最后一个未乱序的元素交换,重复此过程直到数组p中元素全部完成乱序。这个过程通常通过算法实现,其中一些常见的算法包括Fisher-Yates算法(也称为Knuth shuffle算法)和洗牌算法。

5、数组旋转

基本思路:

    将数组中的元素进行循环移位,使得数组中的元素按照指定的方向和次数进行重新排列。

向右旋转

向左旋转

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值