角标找对应元素
举例:
需求: 封装一个函数 传入数字1 返回 一 数字2 返回 二 ......
代码:
public static char findArray(int index) {
char[] array = new char[] {'一', '二', '三', '四', '五'};
return array[index - 1];
}
char c = findArray(3);
System.out.println(c);
元素找对应角标
举例:
需求: 定义一个数组 数组值分别 为:3,6,11,22 输入11查找对应的位置;
代码:
public static int findIndex(int i, int[] array) {
for (int j = 0; j < array.length; j++) {
if(array[j] == i) {
return j;
}
}
return -1 ;
}
int[] array = new int[]{3, 6, 11, 22};
int index = findIndex(12, array);
if(index == -1) {
System.out.println("数组中无这个值,无法找到对应位置");
}
数组反转
举例:
需求:操作原数组 使原数组反转
分析:
1.反转次数:length/2 (整数)次
2.交换规律:第一个和最后一个数交换 依次换......
array[0] 和 array[length - 1 - 0]
array[1] 和 array[length - 1 - 1]
array[2] 和 array[length - 1 - 2]
总结:
array[i] 和 array[length - 1 - i] 相互交换
3.实现交换:利用中间值来交换
代码:
public static void reverse(int[] array) {
for (int i = 0; i < array.length/2; i++) {
int temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
System.out.println(Arrays.toString(array));
}
}
int[] array = new int[]{1, 2, 3 ,4};
reverse(array);
举例:
需求:封装一个函数 交换数组 x 和 y 角标的值
代码:
public static void changeArray(int x, int y, int[] array) {
int temp = array[x];
array[x] = array[y];
array[y] = temp;
}
int[] array = new int[]{1, 2, 3, 4};
changeArray(3, 2, array);
System.out.println(Arrays.toString(array));
冒泡排序
核心:相邻两个数进行比较 交换位置
举例:
需求:对含有以下元素:3, 2, 5, 1的数组 进行冒泡排序
代码:
int[] array = new int[]{3, 2, 5, 1};
for (int i = 0; i < array.length - 1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
选择排序
核心:选择一个数依次和后面的数比较 换位
举例:
需求:对含有以下元素:3, 2, 5, 1的数组 进行选择排序
代码:
int[] array = new int[]{3, 2, 5, 1};
for (int i = 0; i < array.length - 1; i++) {
for (int j = 1 + i; j < array.length; j++) {
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
System.out.println(Arrays.toString(array));
举例:
需求:
1.随机数[1,100]的数
2.让用户输入一个数
3.输入的这个数 和 随机出来这个数 比较
4.告诉用户 猜的 是大 还是小了
5.循环猜 一直到 猜中为止
代码:
int num =(int)(Math.random() * 100 + 1);
System.out.println("我随机了一个数 看你能不能猜到 请输入:");
Scanner scanner = new Scanner(System.in);
while (true) {
String string = scanner.nextLine();
int newNum = Integer.parseInt(string);
if(newNum > num) {
System.out.println("你猜的数 有点大");
}else if (newNum < num) {
System.out.println("你猜的数 有点小");
}else {
System.out.println("哈哈 恭喜你猜中了");
break;
}
}
System.out.println("电脑随机数的是:" + num);
折半查找
优点:提高查找效率
注意:在有序的数组中 查找
举例:
需求:在含有以下元素:3, 5, 6, 9, 12, 18, 22, 33的数组中 查找 22 对应的角标
分析:
1.明确所要用到的所有变量
2.确定执行循环的条件: array[mid] != key;
代码:
int[] array = new int[]{3, 5, 6, 9, 12, 18, 22, 33};
int min = 0;
int max = array.length - 1;
int mid = (max + min) / 2;
int key = 12;
while (array[mid] != key) {
if (key > array[mid]) {
min = mid + 1;
} else if (key < array[mid]) {
max = mid - 1;
}
mid = (max + min) / 2;
if (max < min) {
mid = -1;
break;
}
}
System.out.println("这个数的角标是:" + mid);