2022-07-16 第三小组 高佳誉 学习日记

Java基础算法

重点

  1. 查询。
  2. 排序。

思维导图

知识点

1.顺序查找

基本思想:从第一个元素开始按照顺序遍历待查序列,直到查找到目标或者查找失败。
特点:对待查序列没有顺序要求(序列中的数可以是有序的也可以是无序的)。
缺点:效率很低(最坏的情况需要遍历整个待查序列)。
点击查看代码
import java.util.Scanner;

public class Ch01 {
    public static void main(String[] args) {
//        数据结构
//        数组
//        链表
//        树
//        图
        int[] arr = new int[]{1,58,46,33,10,5,5,8};
        int[] arr1 = new int[5];
        int j = 0;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int num = sc.nextInt();
        boolean flag = true;
        for (int i = 0;i<arr.length;i++) {
            if (arr[i] == num){
                arr1[j]=i;
                j++;
                flag = false;
                }
            if (i==arr.length-1){
                System.out.print("你要找的数是:"+num+", 数组中有"+j+"个 ,在目标数组中的下标分别是:");
                for (int k = 0; k < j; k++) {
                    System.out.print(arr1[k]+"  ");
                }
            }
        }
        if(flag){
            System.out.println("没有这个数");
        }
    }
}

2.二分法查找

实现思路:
1、前提:有已经排序的数组A(假设已经做好排序)
2、定义左边界L,右边界R,确定搜索范围,循环执行二分查找(34两步)
3、获取中间索引 M = Floor((L+R)/2)
4、中间索引的值 A[M]于待搜索的值T进行比较
  4.1 A[M] == T 表示找到,返回中间索引
  4.2 A[M] > T 中间值右侧的其他元素都大于T,无需比较,中间索引左边去找,M-1设置为右边界,重新查找
  4.3 A[M] < T 中间值左侧侧的其他元素都小于于T,无需比较,中间索引右边去找,M+1设置为左边界,重新查找
5 当L>R 时,表示没有找到,应结束循环。
点击查看代码
import java.util.Scanner;

public class Ch02 {
    public static void main(String[] args) {
//        二分法查找
//        条件:找数字的前提是这个数组必须有顺序
        int [] arr=new int[]{1,2,3,4,5,6,7,8,9,10};
        int left =0;
        int right =arr.length-1;
        System.out.println("请输入需要寻找的数字!");
        Scanner scanner = new Scanner(System.in);
        int num=scanner.nextInt();
        if(num<arr[left]||num>arr[right]){
            System.out.println("没有此数!!!");
        }else {
            int res = -1;
            while (left <= right) {
                //找中间的下标
                int middle = (left + right) / 2;
                if (arr[middle] == num) {
                    res = middle;
                    left = arr.length;
                    //中间数恰好是找的数
                } else if (arr[middle] > num) {
                    //在前半区
                    right = middle - 1;
                    //因为中间数和目标数对比过,不需要再对比 所以可以-1,不减1也可以;
                } else {
                    //在后半区
                    left = middle + 1;
                }
            }
            System.out.println("目标数:" + num + "    的下标为:" + res);
        }
    }
}

3. 冒泡排序

思想:
1.比较相邻的两个元素,如果第一个元素大于第二个元素,就交换位置
2.对每一对相邻的元素再做同样的比较,从最开始的一对到结尾的一对完成全部的比较。最后一个元素肯定最大的
3.对剩下的元素重复第二步操作,直到只有一个元素为止
点击查看代码
import java.util.Arrays;

public class Ch04 {
    public static void main(String[] args) {
        int [] arr=new int[]{6,2,5,3,8,9,1,7,5,4};
        int temp = 0;
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1-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.println(arr[i]);

        }
    }
}

4.选择排序

原理:随机确定一个标志位(一般为第一个数字)作为最小数,然后向后遍历,找到比标志位更小的数便与标志位互换位置并更新最小数。
步骤:
将数组的第一个数字设置为标志位最小数并记录最小数下标。
向后遍历,发现更小数后将该数与标志位互换位置并更新最小数与最小数下标。
循环完成排序
点击查看代码
public class Ch03 {
    public static void main(String[] args) {
        int [] arr=new int[]{6,2,5,3,8,9,1,7,5,4};
        for (int i = 0; i < arr.length-1; i++) {
            int minNum = arr[i];
            int minIndex = i;
            for (int j = i+1; j < arr.length; j++) {
                if(arr[j]<minNum){
                    minNum = arr[j];
                    minIndex = j ;
                }
            }
            arr[minIndex] = arr[i];
            arr[i] = minNum;
        }
        for (int i : arr) {
            System.out.print(i+"  ");
        }
    }
}

5.插入循环

思想:选取边界之后把后面的元素放到前面的选区对应位置
步骤:
1、从第一个元素开始,该元素可以认为已经被排序。
2、取出下一个元素,在已经排序的元素序列中从后向前扫描。
3、如果该元素(已排序)大于新元素,则将该元素移到下一位置。
4、重复步骤3,直到找到已排序的元素小于或者大于新元素的位置。
5、将新元素插入到该位置。
6、重复步骤2。
点击查看代码
import java.util.Arrays;
public class Ch05 {
    public static void main(String[] args) {
        int[] arr = {5,3,2,6,4};
        System.out.println("排序前的结果为:" + Arrays.toString(arr));

        for (int i = 1; i < arr.length; i++) {
            int temp = arr[i];
            int j ;
            for ( j = i; j > 0&&temp<arr[j-1]; j--) {
                arr[j] = arr[j-1];
            }
            arr[j] = temp;
        }

        System.out.println("排序后的结果为:" + Arrays.toString(arr));

    }
}

掌握程度

大部分的知识点都已经掌握,但不是很熟练。自我建议:多写,多写,多写,理解后形成肌肉记忆。

收获

信心,恒心,毅力是最重要的。这是我们必须具备的心理素质。要是学习这门语言开始的时候很有兴趣。遇到苦难就退缩,这样最终会放弃学习java,没有经历风雨怎么见彩虹。编程就是有的时候就是那么这么人。会遇到很多的困惑。但是一旦你弄懂了,或者是你把问题解决了,你会感到很兴奋,编程的快乐就在此了。

学习效果展示

posted @   憨憨的时倾  阅读(39)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示