二分查找法:
nums:被查找的数所在的数组
num:被查找的数
return:被查找数的索引,不存在则返回-1
public class Demo01{
public static void main(String[] args){
int[] nums={1,3,5,7,9,11,15,17,19,23,25};
int num=20;
int index=select(nums,num);
if(index==-1){
System.out.println(num+"不在数组内");
}else{
System.out.println(num+"在数组中的索引为:"+index);
}
}
public static int select(int[]nums,int num){
int max=nums.length-1;//定义索引最大值
int min=0;//定义索引最小值
int mid;//定义中间值索引
do{
mid=(max+min)/2;//索引中间值
if(nums[mid]>num){
//中间值元素比查找数大则改变索引最大值,最大值为索引中间值-1
max=mid-1;
}else if(nums[mid]<num){
//中间值元素比查找数小则改变索引最小值,最小值为索引中间值+1
min=mid+1;
}
//当索引最小值大于索引最大值则代表查找的数不在数组中
if(min>max){
return -1;
}
}while(nums[mid]!=num)
return mid;
}
}
冒泡排序:相邻的两个数两两对比,符合条件的交换位置,每轮找出剩余数的最大值或者最小值直到只剩一个数则排好序。
//冒泡排序:外层循环决定轮数,轮数最大值为长度-1
//内层循环决定每轮比较的次数,每轮最大次数=长度-轮数
public class Demo02 {
public static void main(String[] args) {
int[] nums = {6, 3, 4, 1};
for (int i = 0; i < nums.length-1; i++) {
for (int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
System.out.println(Arrays.toString(nums));//每一轮的结果
}
System.out.println(Arrays.toString(nums));//最终结果
}
}
选择排序:
public class Demo02 {
public static void main(String[] args) {
int[] nums = {4,1,3,6,2};
//外层循环控制是轮数
for (int i = 0; i < nums.length-1; i++) {
//1.定义最小值索引
int min = i;
//2.比较,j 为被对比数的索引
for (int j = i+1; j < nums.length; j++) {
if(nums[min] > nums[j]){
//记录较小值的索引
min = j;
}
}
//3.判断 min 是否发生改变
if(min != i){
int temp = nums[min];
nums[min] = nums[i];
nums[i] = temp;
}
System.out.println(Arrays.toString(nums));
}
}
}