今日分享开始啦,请大家多多指教~
这篇文章简略给大家做了几个java数组算法例题,包含冒泡排序,抉择排序,找最大值、最小值,增加、删除元素等。在面试中也会遇到的问题,是否有本人的答案。大家能够本人入手,把代码实现一下哦!
数组算法例题
1.数组逆序
第一个和最初一个调换,第二个和倒数第二个调换,就相当于把数组像下图一样,进行对折调换,如果数组个数为奇数,则两头放弃不变其余元素调换即可
import java.util.Arrays; class Demo12 { public static void main (String[] args) { int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; System.out.println(Arrays.toString(arr)); reverse(arr); System.out.println(Arrays.toString(arr)); } /** * 数组逆序 * @param arr */ public static void reverse(int[] arr) { for (int i = 0; i < arr.length / 2; i++) { int temp = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = arr[i]; arr[i] = temp; } } }
数组展现:System.out.println(Arrays.toString(arr));
2.找出数组中最大值所在下标地位
因为是找下标地位所以能够先定义一个值为数组下标,间接应用 数组[下标] 形式进行比拟
import java.util.Arrays; class Demo13 { public static void main (String[] args) { int[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 输入数组 System.out.println(Arrays.toString(array)); maxIndexOf(array); } /** * 找到数组中最大<b style="color:transparent">来源gao@!dai!ma.com搞$$代^@码网</b>的数并且输入 * @param arr */ public static void maxIndexOf (int[] arr) { int maxIndex = 0; // i 能够从1开始,不须要maxIndex和本人再比拟一次 for (int i = 1; i < arr.length; i++) { if (arr[i] > arr[maxIndex]){ maxIndex = i; } } System.out.printf("最大的数为 : %d 下标为 : %d", arr[maxIndex] , maxIndex); } }
3.找出数组中指定元素第一次呈现的下标地位
剖析
- 第一次呈现地位
- 如果有多个反复元素
- 有可能不存在指定元素
4.在数组中找出指定下标对应的元素
剖析:有可能不存在指定的索引
5.找出指定元素在数组中最初一次呈现地位
和找出第一个办法差不多
tips:
- 既然是找最初一个数字,能够倒序查找,提高效率
- 判断找不到的状况
肯定要留神,for循环判断 i < array.length 不是小于等于,因为是从0开始
6.找到元素在指定数组中的所有下标地位
要求:
- 不容许在办法内打印展现
- 思考多个数据状况
- 须要在办法外获取到下标数据信息
- 不容许应用数组作为返回值
思考1:
- 保留查问数据的下标地位肯定会用到数组
- 保留下标的数组数据类型是int类型
解决:
另外应用一个数组,作为形式参数,传递首地址,应用此数组寄存下标地位,因为是传递的地址,能够间接更改数组内容,并不需要返回数组的值
思考2:
须要思考保留下标的数组容量
解决:
返回值数组容量和原数组容量统一,这样即便数组内元素值统一且被选中,也能够存储下来
思考3:
返回值,怎么示意,用什么类型数据
new创立一个新的数组,int类型数组中,所有元素初始值都是0,用什么判断元素索引
解决:
返回找到的元素个数,没有则返回0
7.在指定地位插入指定元素
办法剖析:
- public static 不要问
返回值类型:
- void 可用,但不倡议
- boolean 能够true false 抉择boolean类型
- int 可用 返回值的含意束缚较为麻烦
办法名
- add 增加操作
形式参数列表
- 须要插入数据的数组
- 指定插入数据的下标地位
- 指定插入的数据
(int[] arr,int index,int insert);
办法申明
public static boolean add(int[] arr,int index,int insert);
在数组指定地位增加元素,指定地位前面的顺次往后移一位,最初一个0就是要被挤掉的,能够从后向前进行循环操作
外围代码
for (int i = array.length - 1; i > index; i--) { array[i] = array[i-1]; } array[index] = insert;
全副代码
超出数组会溢出
8.删除数组中指定下标的元素
和增加元素基本一致,逻辑变为从删除地位开始之后的元素都往前移一位,间接笼罩掉要删除地位元素
外围代码
for (int i = index; i < array.length - 1; i++) { array[i] = array[i+1]; } // 最初一个元素补零 array[array.length - 1] = 0; return true;
0代表有效元素,占位应用
全副代码
9.冒泡排序算法
首先要明确一点,形参是援用传值,传的是数组的首地址,操作的还是原来的数组
package cn.ocean888; import java.util.Arrays; public class Demo4 { public static void main(String[] args) { int[] array = { 4399, 3, 360, 3, 4, 11, 32, 3, 123, 86}; System.out.println(Arrays.toString(array)); arraySort(array); System.out.println(Arrays.toString(array)); } public static void arraySort(int[] array) { array[5] = 0; } }
for循环示意图,也就是10个数两两比拟,须要9次能够找出一个最大值,并且将最大值放到最初边
i示意内部即第一层循环管制循环次数
j示意外部即第二层循环管制那些数两两间进行比拟
i=0 时,j 要循环9次,找出最大值放到最初,下一次循环时最大值就不须要再管了
i=1 时,因为曾经找到了最大值,所以这次 j 循环八次就能够了
i和j的对应关系: j = 数组长度 -1 – i
为啥要减1:因为10个数两两比拟,仅须要比拟九次
源码如下
排序成果
10.抉择排序
抉择排序根本想法是:比方有10个数,最大值在每次循环前初始化设置为数组第1个元素的值即array[0],而后与数组的其余残余元素进行比拟,所以比拟次数就是数组总元素-1,10个数循环9次就能够找到最大值,最大值和本次最初的项地位进行调换
在i=1时,因为曾经找到一个最大值并且放到最初了,所以j能够少循环顺次
j = 数组的长度-i-1
i = 1 时
成果展现
抉择排序相较于冒泡排序来说要快一些,抉择排序的工夫复杂度为n(n-1)/2,而冒泡排序为O(n^2),个别倡议抉择排序,当然还有其余更好的排序办法。
小结
简略和大家说下数组的内容,数据类型,告知编译器,以后数组中可能保留的数据类型是什么,定义之后,整个数组中保留的数据类型不能批改,操作数据十分重要。
今日份分享已完结,请大家多多包涵和指导!