数组——算法

1.求数组元素的最大值、最小值、平均数、总和等 -->只对数字类型有效

核心思想

通过定义一个变量在循环中循环赋值,然后在操作这个变量就行。

最大值

int a =0;

int[] arr = new int[]{1,5,3,6,7};

for(int i = 0;i < arr.length;i++){

if(arr[i] > a){

a = arr[i];

}

}

最小值

int a =0;

int[] arr = new int[]{1,5,3,6,7};

for(int i = 0;i < arr.length;i++){

if(arr[i] > a){

a = arr[i];

}

}

计算总和

int a = 0;

int[] arr = new int[]{1,3,4,6,7,3,9};

for(int i  =  0;i  < arr.length;i++){

a+=arr[i];

}

计算平均值

int a = 0;

int[] arr = new int[]{1,3,4,6,7,3,9};

for(int i  =  0;i  < arr.length;i++){

a+=arr[i];

}

int avg = a/arr.length;

2.数组的复制、反转、查找(线性查找、二分法查找)

数组的复制

int[] a = new int[] { 1, 5, 3, 4, 5 };

int[] b = new int[a.length];

//便利数组a

System.out.println("便利a数组的值:");

for (int i = 0; i < a.length; i++) {

System.out.print(a[i]+"\t");

}

System.out.println("");

//将数组a的值复制个数组b,并做简单修改

for (int i = 0; i < a.length; i++) {

b[i] = a[i];

if (i % 2 == 0) {

b[i] = i;

}

}

//便利数组b

System.out.println("便利b数组的值:");

for (int i = 0; i < b.length; i++) {

System.out.print(b[i]+"\t");

}

System.out.println("");

//二次便利数组a,检查是否复制成功

System.out.println("二次便利a数组的值:");

for (int i = 0; i < a.length; i++) {

System.out.print(a[i]+"\t");

}

System.out.println("");

反转

思路:通过一个临时变量来暂时存放一个值,将首位互换,最后将临时值付给尾

String[] array = new String[] { "aa", "bb", "cc", "dd" };

System.out.println("第一次便利:");

for (int i = 0; i < array.length; i++) {

System.out.print(array[i] + "\t");

}

System.out.println();

// 反转方法一

// for (int i = 0, j = array.length - 1; i < j; i++, j--) {

// String a = "";

// a = array[i];

// array[i] = array[j];

// array[j] = a;

// }

// 反转方法二

for (int i = 0; i < array.length / 2; i++) {

String a = "";

a = array[i];

array[i] = array[array.length - i - 1];

array[array.length - i - 1] = a;

}

System.out.println("第二次便利:");

for (int i = 0; i < array.length; i++) {

System.out.print(array[i] + "\t");

}

线性查找

思路:循环便利数组与要查找的值进行比较。如果相等返回下标,不相等给与说明。(不需要排序)

String[] array = new String[]{“aa”,”bb”,”cc”,”dd”,”ee”};

String value = “cc”;

for(int i = 0; i < array.length; i++;){

if(array[i].equals(value)){

System.out.println(“已找到,下标为:” + i + ”);

break;

}

if(i == array.length){

System.out.println(“未找到”);

}

}

二分法查找

//二分法查找:要求此数组必须是有序的。

int[] arr3 = new int[]{-99,-54,-2,0,2,33,43,256,999};

boolean isFlag = true;

// int number = 256;

int number = 25;

int head = 0;//首索引位置

int end = arr3.length - 1;//尾索引位置

while(head <= end){

int middle = (head + end) / 2;

if(arr3[middle] == number){

System.out.println("找到指定的元素,索引为:" + middle);

isFlag = false;

break;

}else if(arr3[middle] > number){

end = middle - 1;

}else{//arr3[middle] < number

head = middle + 1;

}

}

if(isFlag){

System.out.println("未找打指定的元素");

}

3.数组元素的排序

冒泡排序

思路:通过双重循环,外层循环控制循环多少次。内存循环用来比较相邻俩个值得大小,将大的值放到一边,每次将大的值放到一边后就不需要再比较了,在下次比较时-i,依次类推

int[] array = new int[]{1,5,8,-3,6};

for(int i = 0;i < array.length - 1; i++){//外层控制循环次数

for(int j = 0;j < array.length - 1 - i;j++){//内存控制比较次数,-i的作用:已经到位的值就不许要在比较了

if(array[j] < array[j + 1]){//比较俩个相邻值得大小

int temp = array[j];

array[j] = array[j + 1];

array[j + 1] = temp;

}

}

}

//便利

for (int i = 0; i < array.length; i++) {

System.out.print(array[i] + "\t");

}

选择排序

int[] array = new int[]{1,5,8,-3,6};

for (int i = 0; i < arr.length - 1; i++) {//外层控制循环次数

int index = i;//记录下标

for (int j = i + 1; j < arr.length; j++) {////内层控制比较次数,-i的作用:已经到位的值就不许要在比较了

if (arr[j] < arr[index]) {//比较获取最小值得小标

index = j;

}

}

if (index != i) {//如果最小下标和i相等就表示没有变化

int tmp = arr[i];

arr[i] = arr[index];

arr[index] = tmp;

}

}

//便利

for (int i = 0; i < array.length; i++) {

System.out.print(array[i] + "\t");

}

Arrays工具类的使用

方法

事例

解释

boolean equals(int[] a,int[] b)

Arrays.equals(数组1,数组2);

比较俩个数组是否相等。

一系列重载的方法。

String toString(int[] a)

Arrays.toString(数组名);

输出数组信息。

一系列重载的方法。

void fill(int[] a,int val)

Arrays.fill(数组名,替换值);

将指定值填充到数组之中。

一系列重载的方法。

void sort(int[] a)

Arrays.sort(数组名);

对数组进行升序排序,底层是快速排序。

一系列重载的方法。

int binarySearch(int[] a,int key)

Arrays.binarySearch(数组名,查询值)

对排序后的数组进行二分法检索指定的值。

猜你喜欢

转载自www.cnblogs.com/houwenbo/p/11536581.html