栈和堆
栈
凡是局部变量,都会存放在栈中,用完了就消失了。数组类型变量存放其中
堆
凡是new出来的数组或对象会存放在堆中。
堆中每一个数组值都有一个地址,栈中存放数组的地址
Java垃圾回收机制
对象或者实体在对内存中形成垃圾,Java虚拟机会在不定时进行清理
堆的特点:内存地址值,默认初始值(初始值为0),垃圾回收机制
这时没有垃圾值
只要new,就会出现新的空间
排序
选择排序:从第一个元素开始,每个进行比较
// 选择排序
for(int i=0; i<ns.length-1; i++){
for(int j=i+1; j<ns.length; j++) {
if(ns[i] < ns[j]) {
int t = ns[i];
ns[i] = ns[j];
ns[j] = t;
}
}
}
冒泡排序:相邻元素比较,可以先确定最大值放在最后
//冒泡排序
for (int i = 0; i < ns.length; i++) {
for (int j = 0; j < ns.length-1-i; j++) {
if (ns[j] < ns[j+1]) {
int t = ns[j];
ns[j] = ns[j+1];
ns[j+1] = t;
}
}
}
希尔排序速度最快
查找
折半查找
比较有效,但是数组必须是有序数组
法一:比较所处位置
折半查找方法一min<=max
public static int find(int[] arr,int x) {
int min = 0;
int max = arr.length-1;
int mid;
while(min <= max) {
mid = (min + max)/2;
if(arr[mid]==x) {
return mid;
}
else if(arr[mid] < x){
min = mid + 1;
}
else if(arr[mid] > x){
max = mid - 1;
}
}
return -1;
}
法二:比较值
折半查找方法二arr[i]==x
public static int find_2(int [] arr,int x) {
int min = 0;
int max = arr.length-1;
int mid = (min + max)/2;
while(arr[mid]!=x) {
if(arr[mid]==x) {
return mid;
}
else if(arr[mid] < x){
min = mid + 1;
}
else if(arr[mid] > x){
max = mid - 1;
}
mid = (min + max)/2;
}
return -1;
}
插入元素
在有序数组中插入元素,先判断元素是否在有序数组中,若存在就在存在的位置插入,若不存在就折半查找返回最小角标的位置
public static int insert(int [] arr,int x) {
int min = 0;
int max = arr.length-1;
int mid;
while(min <= max) {
mid = (min + max)/2;
if(arr[mid]==x) {
return mid;
}
else if(arr[mid] < x){
min = mid + 1;
}
else if(arr[mid] > x){
max = mid - 1;
}
}
return min;//返回元素需插入的位置
}