Java基础.数组排序(冒泡排序和选择排序)数组与遍历

ops/2024/11/27 13:00:21/

                                                                 目录

排序

冒泡排序

优化的冒泡排序

选择排序

遍历

一、概念解释

二、目的和意义

数据处理

数据展示

数组基础

数组的定义

如何使用数组

数组初始化

数组长度

案例

案例1:计算班级平均分

案例2:计算班级平均分

案例3:记录运动成绩

案例4:存储员工工资

案例5:存储购物清单

排序

冒泡排序

java">int[] arr = {18, 14, 30, 79, 7, 68, 30, 59, 64, 75};
for (int i = 0; i < arr.length - 1; i++) {for (int j = 0; j < arr.length - 1 - i; j++) {int a = arr[j];int b = arr[j + 1];if (a > b) {arr[j] = b;arr[j + 1] = a;f = false;}}
}

优化的冒泡排序

java">int[] arr = {18, 14, 30, 79, 7, 68, 30, 59, 64, 75};
for (int i = 0; i < arr.length - 1; i++) {boolean f = true;for (int j = 0; j < arr.length - 1 - i; j++) {int a = arr[j];int b = arr[j + 1];if (a > b) {arr[j] = b;arr[j + 1] = a;f = false;}}if (f) {break;}
}

选择排序

  1. 外层循环:遍历数组的所有元素(除了最后一个元素)。

  2. 内层循环:从当前索引 i 开始,遍历数组剩余的部分,寻找最小值的索引。

  3. 交换操作:如果找到了比当前位置 i 更小的值,则记录该索引 x。在外层循环结束后,如果 x 不等于 i,则说明找到了一个更小的值,此时进行交换。

java">int[] arr = {18, 14, 30, 79, 7, 68, 30, 59, 64, 75};
​
for (int i = 0; i < arr.length - 1; i++) {int x = i;for (int j = i + 1; j < arr.length; j++) {if (arr[x] > arr[j]) {x = j;}}if (x != i) {int temp = arr[i];arr[i] = arr[x];arr[x] = temp;}
}

遍历

一、概念解释

在Java中,遍历指的是访问集合(如数组、List、Set、Map等)或其他数据结构中的每个元素的操作过程。它就像是对一组数据进行逐一查看、处理的过程。

二、目的和意义

数据处理

数据展示

数组基础

数组是一种数据结构,用于存储相同类型的多个数据项。它允许我们使用单一的变量名来引用一系列相关的值,这些值通常按照一定的顺序排列,并且可以通过索引来访问特定的位置。

数组的定义
  • 数据类型:数组中的每一个元素都必须是相同的类型,可以是基本类型(如 int, double)或者是引用类型(如 String, 自定义的类)。

  • 数组名:类似于普通变量的名字,它用于标识这个数组。

  • 索引:索引是用来定位数组中每一个元素的位置,索引从0开始计数,直到数组长度减1为止。

  • 数组长度:数组在创建时确定其大小,并且该大小在数组的生命期内不可改变。

如何使用数组

使用数组通常遵循以下步骤:

  1. 声明数组:声明数组时,需要指出数组将存储哪种类型的数据。

    int[] numbers; // 声明一个整型数组String[] names; // 声明一个字符串数组
    
  2. 分配空间:分配空间时,告诉计算机需要多少个连续的空间来存储数据。

    numbers = new int[5]; // 分配5个整数的空间names = new String[10]; // 分配10个字符串的空间
    
  3. 赋值:向数组中的元素赋值。

    numbers[0] = 10;names[0] = "Alice";
    
  4. 处理数据:可以对数组中的数据进行任何必要的处理,例如遍历数组、计算总和或查找最大值等。

    java">for (int i = 0; i < numbers.length; i++) {System.out.println(numbers[i]);
    }

数组初始化
  • 动态初始化:在创建数组时指定大小,之后再逐一赋值。

    int[] nums = new int[5]; 
    nums[0] = 1;nums[1] = 2;// ...
    
  • 静态初始化:在创建数组的同时为其分配初始值。

    int[] nums = new int[]{1, 2, 3, 4, 5}; // 指定大小并初始化 
    int[] nums = {1, 2, 3, 4, 5}; // 直接初始化
    
数组长度
  • 获取数组长度的方法是通过 .length 属性,这通常用于循环遍历数组中的所有元素。

    int[] nums = new int[]{1, 2, 3};System.out.println(nums.length); // 输出3
    

案例

案例1:计算班级平均分

假设一个班级有30个学生的分数,如果使用单独的变量来存储每个学生的分数会非常麻烦。使用数组可以轻松解决这个问题。

java">int[] scores = new int[30]; //声明并分配空间
//假定已知分数,直接赋值
scores[0] = 95;
scores[1] = 89;
//...以此类推直到scores[29]
​
//计算平均分
int sum = 0;
for (int i = 0; i < scores.length; i++) {sum += scores[i];
}
double average = (double) sum / scores.length;
System.out.println("平均分为:" + average);
案例2:计算班级平均分
java">// 声明并分配空间
int[] studentScores = new int[30];
// 动态赋值(这里使用固定值作为示例)
studentScores[0] = 95;
studentScores[1] = 89;
// 假设其他元素也已赋值
// 计算总分
int totalScore = 0;
for (int i = 0; i < studentScores.length; i++) {totalScore += studentScores[i];
}
// 计算平均分
double averageScore = (double)totalScore / studentScores.length;
System.out.println("全班平均分为:" + averageScore);
案例3:记录运动成绩
java">// 创建一个数组来记录5次跳远的成绩
int[] jumpResults = {300, 310, 305, 320, 315};
// 输出每次的成绩
for (int i = 0; i < jumpResults.length; i++) {System.out.println("第" + (i + 1) + "次跳远成绩是:" + jumpResults[i]);
}
案例4:存储员工工资
java">// 创建一个数组来存储5位员工的工资
double[] salaries = {5000.0, 6000.0, 7000.0, 8000.0, 9000.0};
// 找出最高工资
double highestSalary = salaries[0];
for (int i = 1; i < salaries.length; i++) {if (salaries[i] > highestSalary) {highestSalary = salaries[i];}
}
System.out.println("最高工资为:" + highestSalary);
案例5:存储购物清单
java">// 创建一个数组来存储购物清单上的商品名称
String[] shoppingList = {"牛奶", "面包", "鸡蛋", "黄油"};
// 输出购物清单
for (int i = 0; i < shoppingList.length; i++) {System.out.println("购物清单上的第" + (i + 1) + "项是:" + shoppingList[i]);
}


http://www.ppmy.cn/ops/137089.html

相关文章

Redis 可观测最佳实践

Redis 介绍 Redis 是一个开源的高性能键值对&#xff08;key-value&#xff09;数据库。它通常用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构&#xff0c;Redis 通常用于需要快速访问的场景&#xff0c;如会话缓存、全页缓存、排行榜、实时分析等。由于其高性能和…

自由学习记录(25)

只要有修改&#xff0c;子表就不用元表的参数了&#xff0c;用自己的参数&#xff08;只不过和元表里的那个同名&#xff09; 子表用__index“继承”了父表的值&#xff0c;此时子表仍然是空表 一定是创建这样一个同名的变量在原本空空的子表里&#xff0c; 传参要传具体的变…

STM32C011开发(2)----nBOOT_SEL设置

STM32C011开发----2.nBOOT_SEL设置 概述硬件准备视频教学样品申请源码下载参考程序自举模式BOOT0设置配置 nBOOT_SEL生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工…

mac maven编译出现问题

背景 进行maven install 命令&#xff0c;报错&#xff1a; [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a J…

【leetcode】动态规划

31. 873. 最长的斐波那契子序列的长度 题目&#xff1a; 如果序列 X_1, X_2, ..., X_n 满足下列条件&#xff0c;就说它是 斐波那契式 的&#xff1a; n > 3对于所有 i 2 < n&#xff0c;都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr &#xff0…

Linux下通过DRM操作屏幕,发生行对齐 (stride)问题

前言 Linux下使用LVGL操作屏幕&#xff0c;屏幕尺寸是[280*1424]&#xff0c;不管如何设置LVGL的参数&#xff0c;屏幕的显示均为花屏&#xff0c;能看到有图像显示&#xff0c;但是图像是行错乱的。 ubuntu桌面系统显示正常 打印DRM看输出 drm: 280x1424 (0mm X 0mm) pixel …

OpenTK 实现三维空间模型仿真详解

文章目录 一、创建渲染窗口与初始化 OpenGL二、三维模型加载三、渲染管线搭建四、模型渲染与变换五、交互与事件处理一、创建渲染窗口与初始化 OpenGL 继承 GameWindow:   构建自定义类使其继承自 GameWindow,该类内部封装了诸多窗口管理以及渲染循环逻辑,为后续渲染工作…

Android触摸事件setOnTouchListener用法

1&#xff0c;首先需知道MotionEvent类一些参数特性 ACTION_DOWN: 表示用户开始触摸(在第一个点被按下时触发) ACTION_MOVE: 当有点在屏幕上移动时触发&#xff0c;注意的是&#xff0c;由于灵敏度很高&#xff0c;所以基本上只要有点在屏幕上&#xff0c;此事件就会不停地被触…