冒泡法
- 用于排序
- 两层for循环,外层长度nums.length;内层循环nums.length-1;
- 顺序:nums[i] > nums[i+1] 调换顺序;倒序反之
栗子
for(int i = 0;i<nums.length;i++) {
for(int j = 0;j<nums.length-i-1;j++) {
if(nums[j]>nums[j+1]) {
a = nums[j+1];
nums[j+1] = nums[j];
nums[j] = a;
}
}
}
二分法
1、用于定位快速定位有序数列中目标值
2、循环次数未知,用while循环
3、三个重要的点:①最小值坐标;②最大值坐标;③中间值坐标=(最小值坐标+最大值坐标)/2
4、目标值与中间坐标对应的值比较:①比中间小,最大坐标→中间坐标-1;②比中间值大,最小坐标→中间坐标+1;③相等→找到了;④最小坐标>最大坐标→没找到
int minIndex=0;
int maxIndex=nums.length;
int midIndex = (minIndex+maxIndex)/2;
while(true) {
if(target < nums[midIndex]) {
maxIndex = midIndex-1;
}
else if(target > nums[midIndex]) {
minIndex = minIndex+1;
}
else {
System.out.println("这个数下标为:"+midIndex);
break;
}
midIndex = (minIndex+maxIndex)/2;
if(minIndex > maxIndex) {
System.out.println("没有这个数");
break;
}
}