一.数组是什么?
数组其实就是一个用来保存一组相同类型数据的容器。
数组在堆内存中开辟的是一块连续的内存空间。
数组的三种声明方式:
int[] array = new int[数组的长度];
int[] array1 = new int[]{1,2,3,4,5,6};
int[] array2={1,3,5,7};
二.数组的遍历是如何实现的?
一维数组的遍历
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5};
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
二维数组的遍历
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
System.out.print(array1[i][j] + " ");
}
}
三.如何实现数组中元素的反转?
public static void changeArray(int[] array) {/*
* 交换的次数--数组的长度/2
* array[i] = array[array.length-1-i];
*/
//计算循环次数
int num = array.length/2;
for (int i = 0; i < num; i++) {
int temp = array[i];
array[i] = array[array.length-1-i];
array[array.length-1-i] = temp;
}
}
使用这个changeArray函数即可实现元素的反转。
四.数组中常见的两种排序
1.冒泡排序
冒泡排序的核心思想是:对相邻两个数进行比较换位。
代码实现如下:
public static void main(String[] args) {int[] array = {3,2,5,1};
/*
* 外循环 控制一共比了多少趟
* 内循环 控制一趟比多少次
* 要求: 2分钟
*/
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1-i; j++) {
//判断大小
//外循环-1 防止数组越界
//内循环-i 循环一次,确定一个数,每次都少比一次
if(array[j]>array[j+1]) {
//交换
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
2.选择排序
选择排序的核心思想是:选择一个数(选第一个数)和其他的数进行比较交换
代码实现如下:
public static void main(String[] args) {
int[] array = {3,2,5,1};
for (int i = 0; i < array.length-1; i++) {
for (int j = 1+i; j < array.length; j++) {
//用第0个数和剩下比较
if(array[i]>array[j]) {
//交换
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
五.折半查找
折半查找有一个前提,数组必须是有序数组
public static void main(String[] args) {
int[] array = {1,22,33,44,55,66};
int key = 55;
// 先声明要使用到的变量
int min = 0;
int max = array.length - 1;
int mid = ( min + max )/2;
//循环 明确知道循环的停止条件
while(array[mid]!=key) {
//判断key和中间角标志来挪动最小角标或最大角标
if(key>array[mid]){
min = mid + 1;
}
if (key<array[mid]) {
max = mid - 1;
}
//每次循环都要有折半操作
mid = ( min + max )/2;
//数组中没有这个数的时候
if (min>max) {
//没有这个数 使用-1表示
mid = -1;
break;//跳出循环
}
}