当前位置:网站首页>数组的高级操作
数组的高级操作
2022-08-02 03:24:00 【cierxiao】
#博学谷IT学习技术支持#
一、二分查找
二分查找概述
查找指定元素在数组中的位置时,以前的方式是通过遍历,逐个获取每个元素,看是否是要查找的元素,这种方式当数组元素较多时,查找的效率很低
二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率
需求
在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置
实现步骤
1. 定义两个变量,表示要查找的范围。默认min = 0 ,max = 最大索引
2. 循环查找,但是min <= max
3. 计算出mid的值
4. 判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引
5. 如果要查找的值在mid的左半边,那么min值不变,max = mid -1.继续下次循环查找
6. 如果要查找的值在mid的右半边,那么max值不变,min = mid + 1.继续下次循环查找
7. 当min > max 时,表示要查找的元素在数组中不存在,返回-1.
代码实现
public static void main(String[] args) {
int [] arr = {
1,2,3,4,5,6,7,8,9,10};
int number = 11;
//1,我现在要干嘛? --- 二分查找
//2.我干这件事情需要什么? --- 数组 元素
//3,我干完了,要不要把结果返回调用者 --- 把索引返回给调用者
int index = binarySearchForIndex(arr,number);
System.out.println(index);
}
private static int binarySearchForIndex(int[] arr, int number) {
//1,定义查找的范围
int min = 0;
int max = arr.length - 1;
//2.循环查找 min <= max
while(min <= max){
//3.计算出中间位置 mid
int mid = (min + max) >> 1;
//mid指向的元素 > number
if(arr[mid] > number){
//表示要查找的元素在左边.
max = mid -1;
}else if(arr[mid] < number){
//mid指向的元素 < number
//表示要查找的元素在右边.
min = mid + 1;
}else{
//mid指向的元素 == number
return mid;
}
}
//如果min大于了max就表示元素不存在,返回-1.
return -1;
}
注意事项
有一个前提条件,数组内的元素一定要按照大小顺序排列,如果没有大小顺序,是不能使用二分查找法的
二、 冒泡排序
冒泡排序概述
一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序
如果有n个数据进行排序,总共需要比较n-1次
每一次比较完毕,下一次的比较就会少一个数据参与
代码实现
public static void main(String[] args) {
int[] arr = {
3, 5, 2, 1, 4};
//1 2 3 4 5
bubbleSort(arr);
}
private static void bubbleSort(int[] arr) {
//外层循环控制的是次数 比数组的长度少一次.
for (int i = 0; i < arr.length -1; i++) {
//内存循环就是实际循环比较的
//-1 是为了让数组不要越界
//-i 每一轮结束之后,我们就会少比一个数字.
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
printArr(arr);
}
private static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
三、 Arrays
Arrays的常用方法
| 方法名 | 说明 |
|---|---|
| public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
| public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
| public static int binarySearch(int[] a, int key) | 利用二分查找返回指定元素的索引 |
示例代码
public static void main(String[] args) {
// public static String toString(int[] a) 返回指定数组的内容的字符串表示形式
// int [] arr = {3,2,4,6,7};
// System.out.println(Arrays.toString(arr));
// public static void sort(int[] a) 按照数字顺序排列指定的数组
// int [] arr = {3,2,4,6,7};
// Arrays.sort(arr);
// System.out.println(Arrays.toString(arr));
// public static int binarySearch(int[] a, int key) 利用二分查找返回指定元素的索引
int [] arr = {
1,2,3,4,5,6,7,8,9,10};
int index = Arrays.binarySearch(arr, 0);
System.out.println(index);
//1,数组必须有序
//2.如果要查找的元素存在,那么返回的是这个元素实际的索引
//3.如果要查找的元素不存在,那么返回的是 (-插入点-1)
//插入点:如果这个元素在数组中,他应该在哪个索引上.
}
工具类设计思想
1. 构造方法用 private 修饰
2. 成员用 public static 修饰
总结
本篇文章内容主要介绍了二分查找、冒泡排序、Arrays 的格式和用法,以及之间的不同之处,并根据用法逻辑判断出相应的应用情景,更有效率地帮助我们进行开发。
好啦!本篇文章到这里就结束啦!大家好好练习便能运用自如,每一天都要加油呀!!!
🥰 🥰 🥰你的点赞是对我最大的鼓励。🥰 🥰 🥰
🥰 🥰 🥰你的收藏是对我文章的认可。️🥰 🥰 🥰
🥰 🥰 🥰你的关注是对我前进的动力。🥰 🥰 🥰
边栏推荐
猜你喜欢
随机推荐
我的小笔记 =》原生微信小程序
C语言 十六进制整数字符串转十进制整数
require模块化语法
[Mianjing] Mihayou data development on one side and two sides
猴子选大王(约瑟环问题)
The usage of json type field in mysql
ES6介绍+定义变量+不同情况下箭头函数的this指向
解决glob()返回文件排序不一致问题&onnx本地按照安装方法
String comparison size in MySQL (date string comparison problem)
远程调试、无cuDnn、自定义模块无法导入问题记录
钟表刻度线
uniapp | 使用npm update更新后编译报错问题
DSPE-PEG-PDP, DSPE-PEG-OPSS, phospholipid-polyethylene glycol-mercaptopyridine supply, MW: 5000
阿里云设置域名解析重定向后,无法使用Chrome访问
1.13 学习JS
Circular linked list---------Joseph problem
函数提升和变量提升
针对简历上的问题
URL URL
nucleo stm32 h743 FREERTOS CUBE MX配置小记录








