110
社区成员
发帖
与我相关
我的任务
分享
栈内存
栈内存存储的是局部变量。局部变量:类中方法内的变量(对应的,类中方法外的变量是全局变量)。
要定义局部变量,就得加载局部变量所在的方法。因此是方法先进入栈内存,再定义局部变量。
局部变量都有自己的作用域,一旦离开这个作用域,变量就会被释放(就行fori循环中的 i ,for循环结束后变量 i 就被释放了,再用变量 i 的时候会提示未定义。因此局部变量的生命周期都很短,因此栈内存的更新速度很快。
栈内存的结构是先进后出的,有点像子弹,最后压进去的子弹会被最先打出来。
堆内存
存储的是对象,凡是new的新对象建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的。
堆内存的结构是先进先出的,有点像排队检票,队伍前面的数据会被先处理。
使用非递归方式对数组[8, 7, 12, 1, 5, 0, 6, 9, 2]执行折半查找
package com.xxm.task4;
/*
使用非递归方式对数组[8, 7, 12, 1, 5, 0, 6, 9, 2]执行折半查找
*/
import java.util.Scanner;
import java.util.Arrays;
public class Quest4_5_BinarySearch {
public static void main(String[] args) {
int[] arr = new int[]{8, 7, 12, 1, 5, 0, 6, 9, 2};
Scanner sc = new Scanner(System.in);
bubble(arr);
System.out.println("排序后的数组为" + arr.toString());
System.out.println("请输入你想查找的数:");
int num = sc.nextInt();
if (binarySearch(arr, num) >= 0) {
System.out.println("您要找的数字是第" + (binarySearch(arr, num) + 1) + "个");
} else {
System.out.println("您要找的数字不在该数组中");
}
}
/*
1、对比mid与num,二分数组
2、对比mid与num,二分数组。重复N次,设置计数器来记录分半后的数组长度len
mid与num相等时,返回num的索引值。
当len<=1时,对比mid与num,如果不等,返回一个负值,代表没找到。
*/
public static int binarySearch(int[] arr, int num) {
//定义初始最小、最大索引
int low = 0;
int high = arr.length - 1;
//确保不会出现重复查找,越界
while (low <= high) {
//计算出中间索引值
int mid = (low + high) / 2;
if (num == arr[mid]) {
return mid;
//判断下限
} else if (num < arr[mid]) {
high = mid - 1;
//判断上限
} else {
low = mid + 1;
}
}
//若没有,则返回-1
return -1;
}
/*
二分搜索需要在有序数列中进行,因此用冒泡法将数列排序。
*/
public static void bubble(int[] arr) {
for (int i = arr.length; i > 0; i--) {
for (int j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = 0;
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
}
这里需要注意的是,折半查找需要序列是有序的,因此先对数组进行了排序。
InputStream inputStream = System.in;
Reader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String name = bufferedReader.readLine(); //从键盘读取字符串
String sAge = bufferedReader.readLine(); //从键盘读取字符串
int nAge = Integer.parseInt(sAge); //将字符串转换为数字。
今天除了上述内容,还在codegym里自己看了3-4课。
假期看看书,然后自己在codegym里也多学学,打下基础。