美文网首页
JavaSE进阶-03-算法

JavaSE进阶-03-算法

作者: 努力学习的lfk | 来源:发表于2021-08-25 17:31 被阅读0次

    算法实际上在Java中不需要精通,因为Java已经封装好了。

    例如Java中提供了一个数组工具类:java.util.Arrays

    常用的方法
    排序算法:sort()。

    package >com.bjpowernode.javase.array;
    
    import java.util.Arrays;
    
    public class ArraysTest01 {
       /*
       *   使用SUN佛南公司提供的数据工具类:java.util.Arrays
       * */
       public static void main(String[] args) {
           int[] arr={2,3,4,56,47,1};
           //工具类当中的方法大部分都是静态的。
           Arrays.sort(arr);
           //遍历
           for (int i = 0; i <arr.length ; i++) >{
               System.out.print(arr[i]+",");
           }
       }
    }
    

    二分查找:binarySearch()。

    package com.bjpowernode.javase.array;
    
    import java.util.Arrays;
    
    public class ArraysTest02 {
       public static void main(String[] args) {
           int[] arr={3,6,5,12,1,2,32,5,5};
           //排序
           Arrays.sort(arr);
           for (int i = 0; i <arr.length ; i++) {
               System.out.print(arr[i]+",");
           }
           System.out.println();
           //二分查找
           int key=32;
           int index=Arrays.binarySearch(arr,key);
           System.out.println(index==-1?"元素"+key+"不存在":"元素"+key+"的下标是:"+index);
       }
    }
    

    (工具类是静态方法=>为了方便使用,不需要new对象,直接使用类名调用就行。)


    • 常见的算法:
      • 排序算法
        • 冒泡排序算法
        package      >com.bjpowernode.javase.array;
        
        public class BubbleSort {
           public static void      >main(String[] args) {
               //原始数据
               int[] arr={3,2,7,6,8};
               //temp用于交换
               int temp;
               //使用冒泡排序算法对以上数组元素进行排序
               /*
               冒泡排序算法:每次循环结束后,都要找出最大的数据,放到参与比较的这堆数据的最右边。
                   原始数据:8,7,6,3,2
                   第一次循环(保证最大的数交换到最右边)
                       第一次比较:7,8,6,3,2(8和7比较)
                       第二次比较:7,6,8,3,2(8和6比较)
                       第三次比较:7,6,3,8,2(8和3比较)
                       第四次比较:7,6,3,2,8(8和2比较)
                   第二次循环(保证第二大的数交换到右边倒数第二的位置)
                       第一次比较:6,7,3,2,8(7和6比较)
                       第二次比较:6,3,7,2,8(7和3比较)
                       第三次比较:6,3,2,7,8(7和2比较)
                   第三次循环(保证第三大的数交换到右边倒数第三的位置)
                       第一次比较:3,6,2,7,8(6和3比较)
                       第二次比较:3,2,6,7,8(6和2比较)
                   第四次循环(保证第四大的数交换到右边倒数第四的位置)
                       第一次比较:2,3,6,7,8(3和2比较)
               */
               for (int i = arr.length-1; i >0 ; i--) {
                   for (int j = 0; j < i; j++) {
                       if (arr[j]>arr[j+1]) {
                           temp=arr[j];
                           arr[j]=arr[j+1];
                           arr[j+1]=temp;
                       }
                   }
               }
        
               for (int i = 0; i <arr.length ; i++) {
                   System.out.print(arr[i]+",");
               }
           }
        }
        
        
        • 选择排序算法
        package      >com.bjpowernode.javase.array;
        /*
        选择排序:
           每一次从这堆参与比较的数据当中找出最小值,
           将其中最小值和最前面的数据交换.
           选择排序比冒泡排序效率高,高在交换次数上
        
           参与比较的数据:31625
           第1次循环之后的结果:1  3625
        
           参与比较的数据:3625
           第2次循环之后的结果:12   635
        
           参与比较的数据:365
           第3次循环之后的结果:123   65
        
           参与比较的数据:65
           第4次循环之后的结果:1235   6
        */
        public class SelectSort {
           public static void main(String[] args) {
               //原始数据
               int[] arr={3,1,6,2,5};
               //temp用于交换
               int temp;
               //用于指向最大数据的下表
               int index;
               
               for (int i =0; i <arr.length-1 ; i++) {
                   index=i;
                   for (int j = i+1; j <arr.length ; j++) {
                       if (arr[index]<arr[j]){
                           index=j;
                       }
                   }
                   //交换位置
                   temp=arr[index];
                   arr[index]=arr[i];
                   arr[i]=temp;
               }
               //打印
               for (int i = 0; i <arr.length ; i++)      >{
                   System.out.print(arr[i]+",");
               }
           }
        }
        
      • 查找算法
        • 二分查找算法
        package com.bjpowernode.javase.array;
        /*
           数组的元素查找有两种方式:
               第一种方式:一个一个挨着找,直到找到为止。
               第二种方式:二分查找(算法),二分查找是基于排序的基础上的
                   10,11,12,13,14,15,16,17,18,19,20
                   通过二分法查找,找出18这个元素的下标:
        */
        public class ArraySearch {
           public static void main(String[] args) {
               int[] array={10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
               int number=15;
               int sign=selectArray(array,number);
               System.out.println((sign==-1)?"找不到数字"+number:"数字"+number+"的下标为"+sign);
           }
        
           private static int selectArray(int[] array,int number){
               int min=0;
               int max=array.length-1;
               int middle=(min+max)/2;
              while (min<=max) {
                   if (array[middle] >number) {
                       max=middle-1;
                       middle=(min+max)/2;
                   }else if (array[middle]<number){
                       min=middle+1;
                       middle=(min+max)/2;
                   }else {
                       return middle;
                   }
               }
              return -1;
           }
        }
        

    笔记来源:B站动力节点Java零基础教程视频

    视频链接:https://www.bilibili.com/video/BV1Rx411876f

    相关文章

      网友评论

          本文标题:JavaSE进阶-03-算法

          本文链接:https://www.haomeiwen.com/subject/ozutiltx.html