一. 选择排序:
1.选择排序的思想:从0索引开始,用它对应的元素依次和后面索引对应的元素进行比较,小的往前放,第一次比较完毕,最小值出现在了最小索引处,依次这样进行比较。
2.选择排序的具体过程:
原始数组:
24 69 80 57 13
第一次比较结果:
13 69 80 57 24 (0索引对应的元素24分别和69、80、57、13进行比较,24比13大,所以24和13交换位 置)
第二次比较结果:
13 24 80 69 57 (1索引对应的元素69分别和80、57进行比较,69比57小,所以69和57交换位置,然后57 继续和24进行比较,57比24大,继续交换位置)
第三次比较结果:
13 24 57 80 69 (2索引对应的80和69比较,80比69大,交换位置,然后69继续和57比较,69比57大,交 换位置)
第四次比较结果:
13 24 57 69 80 (3索引对应的80和69进行比较,80比69大,交换位置,便得到了最终比较结果)
3.选择排序的规律:
(1)用0索引对应的元素依次和后面的索引对应的元素进行比较,小的往前放。
(2)依次用1索引......到最后,arr.length-2索引和arr,length-1索引进行比较。
4.选择排序的代码:
public static void selectSort(int[] arr){
for(int x = 0 ;x < arr.length-1 ;x++){
for(int y = x +1 ; y<arr.length ; y++){
//判断
if(arr[y]<arr[x]){
int temp = arr[x] ;
arr[x] = arr[y] ;
arr[y] = temp ;
}
}
}
}
二.二分查找(折半查找)
5.折半查找代码:
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组,静态初始化
int[] arr = {11,22,33,44,55,66,77} ;
//需求:查找33元素对应的索引
int index = getIndex(arr, 33) ;
System.out.println("index:"+index);
//需求:要查找333元素对应的索引
//如果查找的这个元素在数组中查不到呢?
int index2 = getIndex(arr, 333) ;
System.out.println("index2:"+index2);
}
/**
* 两个明确:
* 明确返回值类型:int类型
* 明确参数类型,几个参数:int[] arr,int value
*/
public static int getIndex(int[] arr,int value){
//定义最大索引和最小索引
int max = arr.length -1 ;
int min = 0 ;
//计算中间索引
int mid = (max + min)/2 ;
//拿中间索引对应的元素和要查找的value元素进行比较
while(arr[mid] !=value){
//当前mid索引对应的元素不等于value元素,分两种情况
if(arr[mid]>value){
//重新获取最大索引
max = mid -1 ;
}else if(arr[mid]<value){
min = mid +1 ;
}
//如果找不到了应该返回-1
//判断
if(min>max){
return -1 ;
}
//重新获取最大和最小索引,计算中间索引
mid = (max+min)/2 ;
}
return mid ; //如果直接相等,直接返回
}
}