目录
1.冒泡排序算法
判断数值的大小,大的依次往后走
• 定义第一个循环,来确认需要比较几轮
• 定义第二个循环,来判断一轮循环中需要比较多少次
public class Test1 {
public static void main(String[] args) {
// 目标 : 掌握|冒泡排序|算法
int [] arr ={3,1,5,7,9};
//先定义一个循环,需要比较几轮,n个数需要比较n-1轮
for (int i = 0; i <=arr.length-1; i++) {
// 再定义一个循环,确认每轮循环中需要比较几次
/*
i 1 , 3 , 5 , 7 , 9
第一轮 i=0 得出最大值需要比较四次
第二轮 i=1 得出需要比较三次
第三轮 i=2 得出需要比较二次
第四轮 i=3 得出需要比较一次
*/
for (int j = 0; j < arr.length-i-1 ; j++) {
//判断数值的大小,大的数往后走
if (arr[j]>arr[j+1]){
//对数组中的数据值进行反转,需要定义一个临时变量
int temp=0;
temp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}
2.选择排序算法
选择排序是定位的排序,让当前位置的数与后面位置处的值进行比较,选出较小的值来到当前位置
• 定义第一个循环,来确认需要比较几轮,n-1轮
• 定义第二个循环,来判断一轮循环中需要比较多少次
public class Test2 {
public static void main(String[] args) {
// 目标:掌握选择排序算法
// 选择排序是定位的排序,让当前位置的数与后面位置的处的值进行比较,选出较小值来到当前位置
//1.准备一个数组来排序
double [] arr= {9,8,7,3,2,1};
// 定义一个循环来进行 n-1(n个数)轮排序
for (int i = 0; i < arr.length-1 ; i++) {
/*
i j j=i+1 ,j是后面值的索引,所以要一直比i大1
0 1,2,3,4,5
1 2,3,4,5
2 3,4,5
3 4,5
4 5
*/
// 内部定义一个循环,来决定一轮排序中需要进行几次比较
for (int j = i+1; j < arr.length ; j++) {
// 判断当前位置的值和后面位置处值的大小
// 后面位置的值用arr[j]来取,所以j应该从1开始,
// 第一次比较时,当前位置就是第一个值,arr[0],第二次就是arr[1],即当前位置的值应该为arr[i]
if (arr[i]>arr[j]){
// 将较小值换到当前位置处
double temp =0;
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
//调用Arrays类的toString方法输出数组内容
System.out.println(Arrays.toString(arr));
}
}
3.二分查找
条件:
-
用于查找的内容逻辑上来说是需要有序的
-
查找的数量只能是一个,而不是多个
public class Test3 {
public static void main(String[] args) {
// 目标:掌握二分查找
// 利用二分查找找数据时,数组需要有顺序
// 1.准备出一个数组
int [] arr={1,11,22,33,35,55,77,88,99};
//2.定义一个方法来找数据
binarySearch(arr,77);
// 3.输出这个数
int binarySearchData=binarySearch(arr,80);
System.out.println(binarySearchData);
}
public static int binarySearch (int []arr,int data){
//定义一个循环来用二分法找到所要数据
//这里不知道要循环多少次,所以while
// 二分法需要确立一个左边界限和右边界限
int left=0;//这里left和right是数组的索引
int right=arr.length-1;
// 二分查找的结束条件就是left>right,跳出循环
while(left<=right){
int middle=(left+right)/2;
if (arr[middle]>data){//中间位置的值大于该数据,往左找
//注意:是该位置出处的值,middle是索引
right=middle-1;
}
else if(arr[middle]<data){
left=middle+1;
}
else {
return middle;
}
}
return -1;//找不到数据时
}
}