一,算法

二,数据结构

  1. 数组:最基本的数据结构,是一张表,线性表(数据元素之间是一对一的关系
    除了第一个和最后一个之外,其余的元素都是首尾连接)。
  2. 链表:
  3. 树:
  4. 图:

三,查找算法—线性查找

  • 例题1:

(js)找一个数在数组中的位置,在数组中是否存在,如果存在,返回下标。如果不存在,返回-1。如果找到了,则把下标i保存起来,显示的你要找的数是xxx,在目标数组中的下标是xxx。
          如果没找到,则显示你要找的数是xxx,在目标数组中是不存在的。

public class Ch01 {public static void main(String[] args) {int [] arr = new int[]{1,58,46,33,10,5,-8};Scanner sc = new Scanner(System.in);System.out.println("请输入一个数:");int num = sc.nextInt();int index = -1;index = i;break;if(index != -1) {System.out.println("你要找的数是:" + num + ",在目标数组中的下标是:" + index);}else {System.out.println("你要找的数是:" + num + ",在目标数组中不存在");}}

四,查找算法—二分法查找

查找算法: 二分法查找。如果要使用二分法查找找数字,前提是这个数组必须有顺序

  • 例题2:

public class Ch02 {public static void main(String[] args) {int [] arr = new int[]{1,2,3,4,5,6,7};Scanner sc = new Scanner(System.in);System.out.println("请输入要查找的数字:");int target = sc.nextInt();// 最左边的下标int left = 0;// 最右边的下标int right =  arr.length - 1;if(target < arr[left] || target > arr[right]){System.out.println(target + "在目标数组中不存在!");}else {// 用来保存找到的下标的值int res = -1;while(left <= right) {// 找出中间的下标int middle = (left + right) / 2;if(arr[middle] == target) {// 中间的数恰巧就是我们要找的数res = middle;break;}else if(arr[middle] > target){// 说明我们要找的数在数组的前半区/*如果在前半区维护left和rightleft是不需要动的right应该移位到中间位置*/right = middle - 1;}else {// 条件实际上就是arr[middle]<target/*说明在后半区right是不需要动的left应该向右移位到中间位置*/left = middle + 1;}}System.out.println(target + "在目标数组中的下标是:" + res);}}
}

五,排序算法—冒泡排序

(一)八大排序算法:

  1. 冒泡排序
  2. .快速排序
  3. 插入排序
  4. 选择排序
  5. 希尔排序
  6. 堆排序
  7. 归并排序
  8. 桶排序

(二)冒泡排序 让其从小到大排列

思路分析:先拿第一个数和后面的数一一比较大小。

冒泡排序需要两层循环嵌套:for

外层循环for是控制的是比较轮数,内层循环for循环的控制的是每个数真正的比较。

比较次数=数组长度减去一

  • 例题3:
public class Ch03 {public static void main(String[] args) {int [] arr = new int[]{1,58,460,-33,10,5,-8};/*1和58 58和46 58和33 58和10 58和5 58和-81 46 33 10 5 -8 581和46 46和33 46和10 46和5 46和-81 33 10 5 -8 46 581和33 33和10 33和5 33和-81 10 5 -8 33 46 581和10 10和5 10和-81 5 -8 10 33 46 581和5 5和-81 -8 5 10 33 46 581和-8-8 1 5 10 33 46 58*/// 从小到大/*冒泡排序思路分析:1.我先拿第一个数和后面的数一一比较大小*//*冒泡排序需要两层循环嵌套:for外层for循环控制的是需要各个数之间比较几轮内层的for循环控制的是每个数的真正的比较*/for (int i = 0; i < arr.length - 1; i++) {//已经控制好了比较的次数// 比较的次数 = 数组的长度 - 1for (int j = 0; j < arr.length - 1 - i; j++) {if(arr[j] < arr[j+1]){// 如果前面的比后面的大,换位int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}System.out.print("第" + (i + 1) + "轮的比较结果是:");for (int i1 : arr) {System.out.print(i1 + "、");}System.out.println();}}
}
  • 例题4:冒泡排序的简便操作

public class Ch04 {public static void main(String[] args) {int [] arr = new int[]{1,58,460,-33,10,5,-8};// 从小到大Arrays.sort(arr);for (int i : arr) {System.out.println(i);}}
}

(三)选择排序

public class Ch01 {public static void main(String[] args) {/*第一轮i=0,minIndex=0,里层的for循环int j = 1;j < 7;if(arr[0] > arr[1]){}。由于if不满足,则继续下一次的比较。j = 2,if(arr[0] > arr[2]){}。由于if不满足,则继续下一次的比较。j = 3,if(arr[0] > arr[3]){}。由于if不满足,则继续下一次的比较。j = 4,if(arr[0] > arr[4]){}。由于if不满足,则继续下一次的比较。j = 5,if(arr[0] > arr[5]){}。由于if满足条件,执行了minIndex = 5.j = 6,if(arr[5] > arr[6]){}。由于if不满足,则继续下一次的比较。j = 7,if(arr[5] > arr[7]){}。由于if不满足,则继续下一次的比较。到此为止,里层的for循环执行完毕。minIndex = 5。执行的int temp = arr[5];arr[5] = arr[0];arr[0] = temp;i=0的这次外层循环执行完毕。数组变成了-8、25、48、12、10、1、127、56第二轮i=1,minIndex = 1,j = 2,if(arr[1] > arr[2]){}。由于if不满足,则继续下一次的比较。j = 3,if(arr[0] > arr[3]){}。由于if满足,minIndex = 3;j = 4,if(arr[3] > arr[4]){}。由于if满足,minIndex = 4;j = 5,if(arr[4] > arr[5]){}。由于if满足,minIndex = 5;j = 6,if(arr[5] > arr[6]){}。由于if不满足,则继续下一次的比较。j = 7,if(arr[5] > arr[7]){}。由于if不满足,则继续下一次的比较。到此为止,里层的for循环执行完毕。minIndex = 5。执行的int temp = arr[5];arr[5] = arr[1];arr[1] = temp;数组变成了-8、1、48、12、10、25、127、56第三轮i=2;*/int [] arr = new int[]{1,25,48,12,10,-8,127,56};for (int i = 0; i < arr.length; i++) {// 假设最小数的下标int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if(arr[minIndex]>arr[j]){ // 找到了最小值minIndex = j; //保存最小值的下标}}int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;System.out.print("第" + (i+1) + "次比较结果是:");for (int i1 : arr) {System.out.print(i1 + "、");}System.out.println();}
//        for (int i : arr) {
//            System.out.print(i + "、");
//        }}
}

(四)插入排序

public class Ch02 {public static void main(String[] args) {/*第一轮:i=0,current=arr[1],int preIndex=0,while(0 >= 0 && 25 < arr[0]){}不成立,while循环不启动arr[0+1] = arr[0+1]第二轮:i=1,current=arr[2]=48,int preIndex=1while(1 >= 0&&48<25){}不成立,while循环不启动arr[1+1] = arr[1+1]第三轮:i=2,current=arr[3]=12,int preIndex=2while(2 >=0 && 12 < 48){arr[3] = arr[2]2--;}preIndex=1;while(1 >=0 && 12 < 25){arr[2] = arr[1];1--;}preIndex = 0;while(0 >=0 && 12 < 1){}不成立,while完事arr[1] = 12;1,12,25,48,10,-8,127,56第四轮:i=3,current = arr[4] = 10,int preIndex = 3,while(3>=0 && 10 < 48){arr[4] = arr[3];1,12,25,48,48,-8,127,563--;}preIndex = 2;while(2>=0 && 10 < 25){arr[3] = arr[2];1,12,25,25,48,-8,127,562--;}preIndex = 1;while(1>=0&& 10 < 12){arr[2] = arr[1];1,12,12,25,48,-8,127,561--;}preIndex = 0;while(0>=0&&10 < 1){}不成立,while完事arr[1] = current = 10;1,10,12,25,48,-8,127,56*/int [] arr = new int[]{1,25,48,12,10,-8,127,56};// 定义参照物int current;for (int i = 0; i < arr.length - 1; i++) {current = arr[i + 1];// 定义上一个元素的下标int preIndex = i;// 当上一个数的下标有效不能小于0// 并且还要保证当前的数比他上一个数小,// 这时候,才能让当前数向前移位while(preIndex >= 0 && current < arr[preIndex]){// 移位// 前面的数后移一位arr[preIndex + 1] = arr[preIndex];//preIndex--;}arr[preIndex + 1] = current;}for (int i : arr) {System.out.print(i + "、");}}
}

六, 数组的反转

/*** 数组的反转*/
public class Ch03 {public static void main(String[] args) {
//        int [] arr = new int[]{1,25,48,12,10,-8,127,56};
//        for (int i = arr.length - 1; i >= 0 ; i--) {
//            System.out.println(arr[i]);
//        }/*思路1:创建一个等长的数组把当前数组的每一个元素倒着添加到新数组里新数组赋值给老数组int [] newArr = new int[arr.lenth];*/
//        int [] newArr = new int[arr.length];
//        for (int i = arr.length - 1; i >= 0 ; i--) {
//            newArr[i] = arr[arr.length - 1 - i];
//        }// 新数组赋值给老数组
//        arr = newArr;
//        for (int i : arr) {
//            System.out.println(i);
//        }/*思路2:利用交换的方式*/int [] arr = new int[]{1,25,48,12,10,-8,127,56};
//        for (int i = 0; i < arr.length / 2; i++) {
//            // temp存储的时最后一位
//            int temp = arr[arr.length - 1 - i];
//            arr[arr.length - 1 - i] = arr[i];
//            arr[i] = temp;
//        }
//        for (int i : arr) {
//            System.out.println(i);
//        }
//        Arrays是操作数组的一个工具类System.out.println(Arrays.toString(arr));}
}

七,数组的扩容

/*** 数组的扩容*/
public class Ch04 {public static void main(String[] args) {int [] nums = new int[]{3,4,6};// 定义一个新的临时数组int [] temp = new int[6];for (int i = 0; i < nums.length; i++) {temp[i] = nums[i];}nums = temp;System.out.println(Arrays.toString(nums));}
}

目录

一,算法

二,数据结构

三,查找算法—线性查找

例题1:

四,查找算法—二分法查找

例题2:

五,排序算法—冒泡排序

(一)八大排序算法:

(二)冒泡排序 让其从小到大排列

(三)选择排序

(四)插入排序

六, 数组的反转


2022-07-15 第八组 于凤琳 Java算法+数据结构相关推荐

  1. 2022.08.15 第三组 高小涵

    目录 Mysql数据库 数据库 Mysql 基本操作 表 SQL语言 SQL分类 DCL(数据库控制语言) DDL(数据定义语言) DML(数据操作语言) Mysql数据库 数据库 数据库[按照数据结 ...

  2. 2022-07-23 第二组-于凤琳 继承剩下问题

    一,访问权限修饰符 1.public 公有的 在一个工程下都可以使用 可以用在属性,方法,构造器和类上. 2.protected 受保护的  可以跨包使用 如果跨包必须是它的子类. 3.default ...

  3. Windows批处理命令快速获取文件夹下特定类型的文件名(2022.5.15)

    Windows批处理命令快速获取文件夹下特定类型的文件名 (2022.5.15) 1.需求分析 2.batch简介 3.代码实现 3.1 八种编程语言分别实现 3.1.1 C# 实现 3.1.2 C+ ...

  4. 2022年江西省中职组“网络空间安全”赛项模块A解析

    2022年山西省中职组"网络空间安全"赛项模块A解析 A模块基础设施设置/安全加固(200分) A-1:登录安全加固 A-2:Web安全加固(Web) A-3:流量完整性保护与事件 ...

  5. 少儿python编程和少儿c++编程学哪个比较好(2022.07.18)

    关于少儿编程编程语言的选择,python还是c++ 关于少儿编程编程语言的选择,python还是c++_dllglvzhenfeng的博客-CSDN博客 14岁孩子学python还是c++好_有编程基 ...

  6. 2021.07.16【普及组】模拟赛C组

    2021.07.16[普及组]模拟赛C组 文章目录 2021.07.16[普及组]模拟赛C组 前言 花生采摘 题目 解析 代码 FBI树 题目 解析 代码 火星人 题目 解析 代码 麦森数 题目 解析 ...

  7. GMOJ - 2021.07.20【普及组】模拟赛C组 - 排座椅(seat)、传球游戏(ball)、立体图(drawing)、间谍派遣、seek

    文章目录 luogu博客链接 GMOJ - 2021.07.20[普及组]模拟赛C组 - 排座椅(seat).传球游戏(ball).立体图(drawing).间谍派遣.seek T1 排座椅(seat ...

  8. USACO资料集(2022.07.22)

    USACO详细介绍 全球中小学生均可参加 USACO详细介绍 全球中小学生均可参加_dllglvzhenfeng的博客-CSDN博客 难度级别与国内竞赛类比 青铜--CSP入门级 白银--CSP提高级 ...

  9. P1422 小玉家的电费--2022.03.15

    /* P1422 小玉家的电费--2022.03.15 https://www.luogu.com.cn/problem/P1422 */ #include <bits/stdc++.h> ...

最新文章

  1. 软件工程python就业方向-女生学习软件工程专业就业怎么样?
  2. Android中shape的使用
  3. 用OpenGL进行曲线、曲面的绘制
  4. 搞定高并发,岂能不懂Synchronized底层原理?
  5. 计算机网络时延图,计算机网络中网站性能延迟加载图像的示例分析
  6. Tensorflow[实战篇]——Face Recognition
  7. win11怎么改任务栏大小
  8. Collection 和 Map接口及其实现类总结
  9. 前端布局总结--居中
  10. xmlhttp上传文件(转贴)
  11. 智能优化算法:头脑风暴优化算法-附代码
  12. python 编程自学手册 pdf-跪求《python学习手册》(第五版)pdf中文版!/
  13. spss因子分析结果解读_因子分析巴特利特球形度检验结果解读
  14. ol xyz 加载天地图_OpenLayers 3 之 加载天地图
  15. 艺术和设计的区别是什么?蓝蓝推荐
  16. python +高德地图API调用
  17. 使用Android Studio和阿里云数据库实现一个远程聊天程序
  18. KeyguardBouncer启动流程
  19. 基于jsp servlet javabean的学生管理系统
  20. Android自定义TextView(一)实现圆角、反光效果

热门文章

  1. php转类json格式的数据(没有双引号的JSON格式,一般在硬件对接中出现)
  2. nodejs服务器简单封装
  3. 不谋一时不足以谋一域_“不谋万世者不足谋一时,不谋全局者不足谋一域”是什么意思?...
  4. 城市轨道交通体系架构
  5. C/C++ | sizeof()函数
  6. 对80后玩家影响深远的12款单机游戏
  7. 《搜索》[HD-RMVB.720p.国语中字][陈凯歌作品/高圆圆/姚晨/赵又廷]
  8. IIS屏蔽搜索引擎爬虫
  9. 不要让英语成为你的短板
  10. python降维方法_使用Python进行数据降维|线性降维