目录
1,数组排序
方法一:调用Arrays工具类的sort()方法对数组进行排序
方法二:冒泡排序
2,数组查找
方法一:通过使用Arrays工具类的binarySearch()方法
方法二:二分查找(进行二分查找的数组必须是有序的)
方法三:双指针查找
方法四:遍历查找
3,数组乱序
4,数组旋转
向左旋转:(顺序旋转)
向右旋转:(逆序旋转)
方法一:调用Arrays工具类的sort()方法对数组进行排序
方法二:冒泡排序
冒泡排序私对一个数组进行从小到大的排序。
步骤:
1、比较相邻的元素,如果第一个比第二个大,就交换位置。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个元素。
特点:每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“排除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。
注意:
N个数字来排序
俩俩比较小靠前
总共比较N-1轮
每轮比较N-1-i次
优化后代码:每进行一次排序,都判断一下数组是否已经有序,如果有序则不用在进行排序。
方法一:通过使用Arrays工具类的binarySearch()方法
(注意:进行查找的数组必须是有序数组)
如果数组无序,首先需要对数组进行排序操作
方法二:二分查找(进行二分查找的数组必须是有序的)
二分查找算法思想:
1,判断搜索数组的“中位元素”与要查找的“目标元素”是否相等。
如果相等,代表查找成功,退出算法;
如果不相等,继续比较“中位元素”与要查找的“目标元素”的大小关系;
如果“中位元素”大于“目标元素”,当前数组的前半部分作为新的搜索数组,因为后半部分的所有元素都大于“目标元素”,它们全都被排除了。
如果“中位元素”小于“目标元素”,当前数组的后半部分作为新的搜索数组,因为前半部分的所有元素都小于“目标元素”,它们全都被排除了。
2、在新的搜索数组上,重新开始第1步的工作。
方法三:双指针查找
通过两个下标,分别从数组头部和尾部,同时对该无序数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。
方法四:遍历查找
可以通过对该数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。
数组乱序,也被称为数组洗牌,实现算法中有一个非常著名的洗牌算法Fisher-Yates算法,是由 Ronald A.Fisher和Frank Yates于1938年发明的,后来被Knuth在自己的著作《The Art of Computer Programming》中介绍,很多人直接称Knuth洗牌算法。
实现步骤:
1,假设有一组需要乱序的数组arr。
2,从arr中随机选取一个未乱序的元素。
3,将该元素与数组arr中最后一个未乱序的元素交换。
4,重复2-3的步骤,直到数组arr中元素全部完成乱序。
向左旋转:(顺序旋转)
将头元素和他后边的元素交换位置
向右旋转:(逆序旋转)
尾元素后他的前一个元素交换位置