数组(复习)

数组是一个变量,存储相同数据类型的 一组数据。(数组定义完成后长度是不可变的)

数组的基本要素:

标识符(数组名)、数组元素、元素下标:从0开始、元素类型(int类型)

数组与内存和变量与内存

栈内存:由程序自动向操作系统申请分配以及回收,速度快,使用方便,但程序员无法控制。若分配失败,则提示栈溢出错误。注意,const局部变量也储存在栈区内,栈区向地址减小的方向增长。(一般存放基本数据类型、引用)
堆内存:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。分配的速度较慢,地址不连续,容易碎片化。此外,由程序员申请,同时也必须由程序员负责销毁,否则则导致内存泄露。(一般存放所有new出来的对象,对象的引用放在栈中)

内存空间分为栈内存与堆内存。

数组名放入栈内存,数组元素放在堆内存;通过栈内存的数组名找到堆内存的数组元素。

变量由于比较简单,变量名与变量值都会放在栈内存。

数组应用的一个例子:在一个排完升序的数组中,手动输入一个值,将这个值插入此数组,不能打乱数组的升序

 冒泡排序

选择排序

二分(折半)查找法(排序后再用)


int arr[] = {2, 6, 11, 13, 16, 17, 22, 30};
System.out.println("非递归结果,22的位置为:" + binarySearch(arr, 22));
System.out.println("递归结果,22的位置为:" + binarySearch(arr, 22, 0, 7));
}

//非递归
static int binarySearch(int[] arr, int res) {

int low = 0;
int high = arr.length-1;
while(low <= high) {
int middle = (low + high)/2;
if(res == arr[middle]) {
return middle;
}else if(res <arr[middle]) {
high = middle - 1;
}else {
low = middle + 1;
}
}
return -1;
}
//递归
static int binarySearch(int[] arr,int res,int low,int high){

if(res < arr[low] || res > arr[high] || low > high){
return -1;
}
int middle = (low+high)/2;
if(res < arr[middle]){
return binarySearch(arr, res, low, middle-1);
}else if(res > arr[middle]){
return binarySearch(arr, res, middle+1, high);
}else {
return middle;
}

是否能找到要查找的数字

我是代码搬运工!!!
原文地址:https://www.cnblogs.com/FanKL/p/11228795.html