数组:是一种数据结构,用于存储固定数量的相同类型的元素。这些元素在内存中连续存储,可 以 通过索引访问。索引是一个整数,表示数组中每个元素的位置,从0开始。
目录
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、数组旋转
基本思路:
将数组中的元素进行循环移位,使得数组中的元素按照指定的方向和次数进行重新排列。
向右旋转
向左旋转