java判断数组的对称_java:数组及数组常用算法总结

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

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

//大于最大值的元素,成为最大值,与下一个元素进行比较

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

//元素交换的中间变量

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

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

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

System.out.println("所查询数值没有在数组之内");

}

//for循环判断查找

for(int x=0;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

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

//内层for循环控制 控制数组元素两两比较次数

for(int j=0;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

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]

结语:数组应用非常广泛,上面总结介绍了数组的部分常用算法,以及数组的定义方式;熟能生巧,大家可以仿照上面实例的代码多加练习;

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

本文地址:https://blog.csdn.net/qq_43137699/article/details/107579081

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值