<>java:数组常用部分算法的详细总结

<>一、概念

数组是一种容器,可以储存同一种类型的元素的“容器”;

注意:

数组每一个元素用下标,来表示元素,

​ 下标由0开始,而不是1,

所以:

最后一位元素下标比实际长度小一个数字单位;

<>二、定义

数据类型 [] 数组名称;

<>三、数组的初始化
动态初始化:定义数组时,指定数组长度,系统默认自动为数组元素赋初始值 ​ 格式:数据类型 [] 数组名称 =new 数据类型[数组长度];
静态初始化:直接指定数组元素内容,系统指定数组长度; ​ 格式:数据类型[] 数组名称 =new 数据类型 []{x1,x2,x3........}; ​
简写:数据类型[] 数组名称={x1,x2,x3......}; 错误写法: ​ 数据类型 [] 数组名称 = new 数据类型[数组长度]{x1,x2,x3.
..}; 注意:中括号 [] ,可写在数组名称前后,不会出现语法错误,依照个人习惯即可;
示例代码:
public static void main(String[] args) { //动态初始化: 定义了数组长度为6的整型数组arr; int [] arr
=new int[6]; //静态初始化: 定义了数组长度为3的整型数组arr2; int [] arr2=new int[] {1,2,3};
//静态初始化简写: 定义了直接写入元素1,2,3的整型数组arr3; int [] arr3= {1,2,3}; }
<>四、数组的经典算法应用

1、数组遍历

思路:运用for循环依次遍历数组元素,并输出;
public static void main(String[] args) { //静态初始化了 一个长度为6的整形数组arr; int [] arr= {
1,2,3,4,5,6}; //for循环遍历数组 并显示 //此处输出代码为了输出美观而写,非必要; System.out.print("数组内容:[");
for(int x=0;x<arr.length;x++) { if(arr.length-1==x) { System.out.print(arr[x]+
"]"); }else { System.out.print(arr[x]+","); } } }
运行结果:
数组内容:[1,2,3,4,5,6]
2、数组中找最大数

思路:

1、假设对比,假设一个最大数;

2、运用for循环依次向后对比每一个数组元素;

3、大于假定数的成为最大值,并输出;
public static void main(String[] args) { //静态初始化了 一个长度为6的整形数组arr,找出它的最大数; int [
] arr= {20,60,52,70,90,4}; //假定一个最大值max; int max=0; //for循环依次比较输出 for(int x=0;x<
arr.length;x++) { //大于最大值的元素,成为最大值,与下一个元素进行比较 if(arr[x]>max) { max=arr[x]; } }
System.out.println("最大数为:"+max); }
运行结果:
数组最大数为:90
3、数组元素逆序

思路:对数组进行逆向排序

1、分析可得出中间区间在任何情况一定是不存在或不移动的;

2、所以利用for循环,将数组一分为二对前后对比对称元素

两两交换位置,循环结束,得到结果并输出;
public static void main(String[] args) { //静态初始化了 一个长度为6的整形数组arr,对它进行逆向输出; int
[] arr= {1,2,3,4,5,6}; System.out.println("逆序排序前的数组:"); getShow(arr); //for循环
//length/2将数组一分为二 for(int x=0;x<arr.length/2;x++) { //元素交换的中间变量 int temp=0; temp
=arr[x]; arr[x]=arr[arr.length-1-x]; arr[arr.length-1-x]=temp; } //输出方法 System.
out.println("逆序排序后的数组:"); getShow(arr); } //遍历输出方法 public static void getShow(
int [] arr) { System.out.print("["); for(int x=0;x<arr.length;x++) { if(arr.
length-1==x) { System.out.println(arr[x]+"]"); }else { System.out.print(arr[x]+
","); } } }
运行结果:
逆序排序前的数组: [1,2,3,4,5,6] 逆序排序后的数组: [6,5,4,3,2,1]
四、数组简单查询

思路:

1、for循环遍历数组,依次对比,if==判断查询元素是否存在于数组;

2、存在返回下标,不存在返回-1;
public static void main(String[] args) { //静态初始化了 一个长度为6的整形数组arr,对它进行逆向输出; int
[] arr= {1,2,3,4,5,6}; //查找数字5在 数组arr中的位置; findArr(arr, 5); } //元素查找方法 参数为 arr
所要查询的数组,key 查询的数字 //查找到返回元素下标 //未查找到返回-1 public static int findArr(int [] arr,
int key) { int index=-1; for(int x=0;x<arr.length;x++) { if(arr[x]==key) {
System.out.println("所查询的数字在数组下标为 :"+x); break; } } return -1; }
运行结果:
所查询的数字在数组下标为 :4
五、数组二分查找法

二分法前提:数组有序

思路:1、设置一个 数组下标中间值变量mid, 初始值为: (上界-下界)/2的数组下标;

​ 2、设置一个 数组下标上界变量top 初始值为:数组最后一个元素下标;

​ 3、设置一个 数组下标下界变量bottom 初始值为:数组第一个元素下标;

​ 4、for循环,将所查找元素与mid下标数组变量 循环对比;

​ 5、若查找元素大于mid,则mid变量+1,变为bottom,同时mid进行重新计算;

​ 6、若查找元素小于mid,则mid变量-1,变为top,同时mid进行重新计算;

​ 7、对查询结果进行输出;查询不到在输出后提前输出结果;
public static void main(String[] args) { //静态初始化了 一个长度为6的整形数组arr,对它进行逆向输出; int
[] arr= {1,2,3,4,5,6}; //查找数字5在 数组arr中的位置; findArr(arr, 5); } //二分元素查找法
//查找到返回下标,提前判断围在数组情况; public static void findArr(int [] arr,int key) {
//定义初始界定变量 int top=arr.length-1; int bottom=0; //提前判断所查询数据是否在数组内 if(key>arr[top]
||key<arr[bottom]) { System.out.println("所查询数值没有在数组之内"); } //for循环判断查找 for(int x
=0;x<arr.length;x++) { //将mid 定义在for循环内部 才能动态改变中间值; int mid=(top+bottom)/2;
//若参数key=中间变量mid,则返回查询结果 if(key==arr[mid]) { System.out.println("已查询到数组元素 "+key+
" 的数组下标为:"+mid); break; } //若查找元素大于mid,则mid变量+1,变为bottom,同时mid进行重新计算; if(key>arr
[mid]) { bottom=mid+1; } //若查找元素小于mid,则mid变量-1,变为top,同时mid进行重新计算; if(key<arr[mid
]){ top=mid-1; } } }
运行结果:
已查询到数组元素 5 的数组下标为:4
六、冒泡排序

思路:

1、比较相邻两个元素,左边元素大于右边元素,则左右交换;

2、每一对相邻元素向后依次这样比较,直到已比较交换出最大元素放置在数组最后一位;

3、遍历数组,再次循环上述步骤,除去上一轮和已经选出的最大元素(随着选出的最大数值愈来愈多,两两比较次数会相应减少);
public class Test { public static void main(String[] args){ //定义一个数组arr int []
arr= {3,5,4,1,2}; //排序前的数组 System.out.println("排序前的数组:"); printShow(arr);
//外层控制再次重复步骤 for(int i=0;i<arr.length-1;i++){ //内层for循环控制 控制数组元素两两比较次数 for(int j
=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { //temp作为中间值 //如果前一项大于后一项 则交换位置
int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } //输出排序后的数组 System.out.
println("排序后的数组:"); printShow(arr); } //遍历数组并显示方法 public static void printShow(
int [] arr) { System.out.println("数组如下:"); System.out.print("["); for(int i=0;i<
arr.length;i++) { if(i==arr.length-1) { System.out.print(arr[i]+"]"); }else {
System.out.print(arr[i]+","); } } System.out.println(""); } }
运行结果:
排序前的数组: 数组如下: [3,5,4,1,2] 排序后的数组: 数组如下: [1,2,3,4,5]
结语:数组应用非常广泛,上面总结介绍了数组的部分常用算法,以及数组的定义方式;熟能生巧,大家可以仿照上面实例的代码多加练习;

不是吧,不是吧,!,不会真的有人不点赞吧!。。!!

技术
©2020 ioDraw All rights reserved
泡泡玛特拟12月11日在香港上市 最多融资6.74亿美元java:数组及数组常用算法总结Kaldi之父Daniel Povey博士:发布k2核心代码血管里有垃圾 必须定期输液通?坑你没商量袁隆平团队再次向双季稻亩产1500公斤冲刺mvcc实现原理Java程序员还没有掌握SpringBoot?这一份文档,你真应该好好学学微信小程序自定义波浪组件操作系统与网络协议晦涩难懂,华为18级工程师神级文档助你过关C/C++字符串格式化