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.选择排序算法
选择排序是定位的排序,让当前位置的数与后面位置处的值进行比较,选出较小的值来到当前位置
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;//找不到数据时 } }