冒泡排序 ***
升序排序口诀:
N 个数字来排队 ,
两两相比小靠前 .
外层循环length-1 //控制的是轮数
内层循环length-i-1 //控制的是每一轮中比较的次数
降序排序口诀:
N 个数字来排队 ,
两两相比大靠前 .
外层循环length-1
内层循环length-i-1
升序排序案例:
int[] arr = 任意数组;
int temp = 0;
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){//降序排列的话, 只需要改变比较符号(小于号)
//实现交换位置:
temp = arr[j];//备份j下标数据
arr[j]=arr[j+1];//将j+1下标数据, 存储在j下标的位置
arr[j+1]=temp;//将备份的j下标的数据, 存储在j+1下标的位置
}
}
}
线性查找 ***
循环遍历, 依次比较 !
int[] arr = {10,20,30,40,50,60,70};
for(int i=0;i<arr.length;i++){
if(arr[i]==40){
System.out.println("寻找的数据在"+i+"的位置");
break;
}
}
折半查找(二分查找法)
前提条件: 进行二分查找的数据, 必须是有序的!
需要的变量:
1. 最小范围下标
2. 最大范围下标
3. 中间下标: (随着每次折半,中间下标的结果为:(最小范围+最大范围)/2)
Scanner input = new Scanner(System.in);
int [] arr = {10,22,33,55,88,99,111,150,180,222,333,444,555};
int minIndex = 0;
int maxIndex = arr.length-1;
int centerIndex = (minIndex+maxIndex)/2;
System.err.println("请输入您要寻找的数字:");
int number = input.nextInt();
//用于标注寻找到的数据 ,在哪个下标
int index = -1;
while(true){
//使用中间下标的数据, 与 用于传递的数字 进行比较
if(arr[centerIndex]>number){
//要撇弃右半部分
maxIndex = centerIndex-1;