数组是什么?
数组是相同类型的集合,其实数组就是一个容器,用来存放用一类数据。
数组的定义格式:定义格式有多种
//数组类型[] 数组名 = new 数组类型[大小];
int[] arr = new int[5];
//数组类型 数组名[] = new 数组类型[大小];
int arr1 = new int[5];
//数组类型 数组名[] = new 数组类型[]{数组值}
int arr2[] = new int[]{};
用一段代码来演示一下数组的一些常用的功能常见操作:
package com.leo.study1;
public class ArrayDemo {
/**
* 数组的常用操作
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//定义一个数组
int arr[] =new int[]{1,2,3,54,67,32};
//获取数组的大小用数组的.length属性;打印arr.length=6
System.out.println("arr.length="+arr.length);
//获取数组中的第一个元素arr[0],在数组中每个元素都有对应的角标,从0开始。打印arr[0]=1
System.out.println("arr[0]="+arr[0]);
//利用for循环语句输入数组中的每一个元素,
for (int i = 0; i < arr.length; i++) {
System.out.println("arr["+i+"]="+arr[i]);
}
//获取数组中的最大值arr[max] = 67
System.out.println("arr[max] = "+getMax(arr));
//获取数组中的最大值arr[min] = 1
System.out.println("arr[min] = "+getMin(arr));
}
public static int getMax(int arr[])
{
int max = arr[0];
//循环查找元素值进行比较,x为什么定义为x=1呢 因为在上面已经定义了一个用于存放数组中的第一个元素这样减少了代码的执行次数。
for (int x = 1; x < arr.length; x++) {
//比较循环到的元素与max进行比较
if(arr[x]>max)
{
max = arr[x];
}
}
return max;
}
public static int getMin(int arr[])
{
int min = arr[0];
//循环查找元素值进行比较,x为什么定义为x=1呢 因为在上面已经定义了一个用于存放数组中的第一个元素这样减少了代码的执行次数。
for (int x = 1; x < arr.length; x++) {
//比较循环到的元素与max进行比较
if(arr[x]<min)
{
min = arr[x];
}
}
return min;
}
}
数组的排序:常见的排序(选择排序,冒泡排序)
选择排序:
例如有这么一个数组:int arr[] = new int []{1,8,6,4,3};
用0角标的元素一个一个依次跟数组中的元素进行比较1跟8比较不用换位置,然后接着1跟6比较也不用换位置比完以后1在0角标位置,结果{1,8,6,4,3}
然后用1角标的元素个一个依次跟数组中的元素进行比较8跟6比较换位置,8跟4比较换位置,8跟3比较换位置。。。依次比较完以后,结果{1,6,4,3,8}
....
在比较完最后一次结果:{1,3,4,6,8}
冒泡排序:相邻的两个元素进行比较,如果符合的话则相邻两个互相换位置。
沿用上面的数组{1,8,6,4,3};
第一次比较:第一个元素arr[0] =1 跟arr[1] = 8;比较发现1比8小不用换位置,接着8跟6比较 6跟8换位置,即arr[1]= 6;arr[2]=8;依次比较第一次比较完的数组为{1,6,4,3,8};
然后进行第二次比较依然从第一个元素比较1跟6比较不换位置,6跟4比较换位置,6跟3比较换位置,6跟8比较不换位置比较第二次比较完以后数组为{1,4,3,6,8}
接下来第三次比较1跟4比较不换位置,4跟3比较换位置,4跟6比较不换位置,6跟8比较不换位置结果{1,3,4,6,8}
...
当最后一次比较完成数组就变成了{1,3,4,6,8}
用代码演示两种排序效果:
package com.leo.study1;
public class ArraySortDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = new int[]{1,8,6,4,3};
int arr1[] = new int[]{1,8,6,4,3};
//调用函数进行选择排序
selectSort(arr);
//打印结果[1,8,6,4,3]
printArray(arr);
//调用函数进行冒泡排序
papawSort(arr1);
//打印结果[1,8,6,4,3]
printArray(arr1);
//
}
/*
选择排序
*/
public static void selectSort(int arr[])
{
/*依次按照角标元素跟后续元素进行比较,当比较到最后一个元素
* 的时候就不需要在进行排序了因此外层循环控制i<arr.length-1
* 而每次都是跟后续元素比较因此,内层循环j=i+1;
* */
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//冒泡排序
public static void papawSort(int arr[])
{
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {//-i;让每一次元素减少,-1是为了角标越界。
if(arr[j]>arr[j+1])
{
//互换位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
/*
打印函数
* */
public static void printArray(int arr[])
{
//定义打印格式
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]+"]");
}
}
}
}
//结果[1, 3, 4, 6, 8][1, 3, 4, 6, 8]