值传递:
例子:
public class Test {
public static void main(String[] args) {
int [] a=new int[]{1,2,3};
int [] age=a;
age[0]=0;
System.out.println(a[0]);
//a[0]的值变为0,a[0]和age[0]的地址相同,故一个值改变另一个值也改变
int x=1;
int y=x;
y=2;
//x的值仍为1,y的值改变x的值不变
System.out.println(x);
}
}
1.冒泡排序法
public class Test {
public static void main(String[] args) {
int [] numbers= {5,4,3,2,1};
for(int time=1;time<numbers.length;time++) {
for (int i = 0; i < numbers.length-time; i++) {
int current=numbers[i];
int next=numbers[i+1];
if(current>next) {
numbers[i]=next;
numbers[i+1]=current;
}
}
}
}
}
2.插入排序法
例子1:
public class Test {
public static void main(String[] args) {
int [] numbers= {1,2,4,5,0};
int i=4;
int date=numbers[i];
//找位置
int j=0;
for(;j<i;j++) {
if(numbers[j]>numbers[i]) {
break;
}
}
// int j=2;
//做移动
for (int k = i; k >j; k--) {
numbers[k]=numbers[k-1];
}
//插入
numbers[j]=date;
for (int number : numbers) {
System.out.println(number);
}
}
}
例子2:
public class Test {
public static void main(String[] args) {
int [] numbers= {5,5,4,3,2,1};
for(int i=1;i<numbers.length;i++) {
int date=numbers[i];
//找位置
int j=0;
for(;j<i;j++) {
if(numbers[j]>numbers[i]) {
break;
}
}
if(i==j) {//该行代码提高性能
continue;
}
// int j=2;
//做移动
for (int k = i; k >j; k--) {
numbers[k]=numbers[k-1];
}
//插入
numbers[j]=date;
}
for (int number : numbers) {
System.out.println(number);
}
}
}
3.二分法查找
例子:
public class Test {
public static void main(String[] args) {
int [] numbers= {5,4,3,2,1};
int look=2;
int low=0;
int high=numbers.length-1;
while(low!=high) {
int middle=(low+high)/2;
if(numbers[middle]<look) {
high=middle-1;
}else if(numbers[middle]>look) {
low=middle+1;
}else {
System.out.println(middle);
break;
}
}
}
}