算法

什么是算法?

  • 解决某个实际问题的过程和方法。

排序算法

冒泡排序 

  • 每次从数组中找出最大值放在数组的后面去。

实现冒泡排序的关键步骤:

  • 确定总共需要做几轮:数组长度- 1
  • 每轮比较几次
  • 当前位置大于后一个位置则交换数据 
​
        public static void main(String[] args) {
        //1.准备一个数组
        int [] arrays={5,2,3,1};
        //2.定义一个循环,来控制要循环几轮
        //                5  2  3  1
        //第一次           0  1  2          3次
        //第二次           0  1             2次
        //第三次           0                1次
        for (int i = 0; i < arrays.length-1; i++) {
            for (int j = 0; j < arrays.length-i -1; j++) {
                if(arrays[j]>arrays[j+1]){
                    int temp=arrays[j+1];
                    arrays[j+1]=arrays[j];
                    arrays[j]=temp;
                }

            }

        }
        System.out.println(Arrays.toString(arrays));
    }

​

选择排序 

  • 每轮选择当前位置,开始找出后面的较小值与该位置交换

选择排序的关键: 

  • 确定总共需要做几轮:数组长度-1
  • 控制每轮以以前位置为基准,与后面元素选择几次。
        public static void main(String[] args) {
        //定义一个数组
        int [] arrays={5,2,3,1};
        //排序
        for (int i = 0; i <arrays.length-1 ; i++) {
            for (int j = i+1; j < arrays.length; j++) {
                if(arrays[i]>arrays[j]){
                    int temp=arrays[j];
                    arrays[j]=arrays[i];
                    arrays[i]=temp;
                }
            }


        }
        System.out.println(Arrays.toString(arrays));

查找算法 

基本查找/顺序查找

注意:在数据量特别大的时候,基本查找这种从前往后挨个找的形式,性能是很差的! 

二分查找(折半查找) 

前提条件:数组中的数据必须是有序的

核心思想:每次排除一半的数据,查询数据的性能明显提高很多。

二分查找的实现步骤是什么?

  • 定义变量记录左边和右边位置。
  • 使用while循环控制二分查询(条件是左边位置<=右边位置)
  • 循环内部获取中间元素索引
  • 判断当前要找的元素如果大于中间元素,左边位置=中间索引+1
  • 判断当前要找的元素如果小于中间元素,右边位置=中间索引-1
  • 判断当前要找的元素如果等于中间元素,返回当前中间元素索引。
        public static void main(String[] args) {
        int []arr={7,23,79,81,103,127,131,147};
        System.out.println(binarySearch(arr,81));
    }
        public static int binarySearch(int [] arr,int data){
        int left=0;
        int right=arr.length-1;
        //2.定义一个循环控制结构
        while(left<=right){
            //3.每次折半,都算出中间位置处的索引
            int middle=(left+right)/2;
            //4.判断当前要找的元素值,与中间位置处的元素值的大小情况
            if(data<arr[middle]){
                //往左边找,截止位置(右边位置)=中间位置-1
                right=middle-1;
            }else if(data>arr[middle]){
                //往右找,起始位置(左边位置)=中间位置+1
                left=middle+1;
            }else{
                //中间位置处的元素值,正好等于我们要找的元素值
                return middle;
            }

        }
        return -1; //-1特殊结果,就代表没有找到数据,数组中不存在该数据
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值