Java 语言基础之数组常见操作
- 对数组操作最基本的动作: 存和取
- 核心思想: 就是对角标的操作
数组常见操作:
1, 遍历
2, 获取最大值和最小值
3, 排序
4, 查找
5, 折半查找



// 1. 遍历
int[] arr = {23,435,46,576,456,4,4,56,574,756}
for(int x=0; x<arr.length; x++)
{
// 格式良好
System.out.println("arr["+x+"]="+arr[x]+";");
}
/* 2. 求最值(最大值, 最小值)
思路:
1. 需要进行比较, 并定义变量记录住每次比较后较大的值
2. 对数组中的元素进行遍历取出, 和变量中记录的元素进行比较
如果遍历到的元素大于变量中记录的元素, 就用变量记录住大的值
3. 遍历结束, 该变量记录就是最大值
定义一个功能来实现
明确一, 结果
是数组中的元素, int类型
明确二, 未知内容
数组
*/
第一种方式:
public static int getMax_1(int[] arr)
{
// 定义变量,记录较大的值
int max = arr[0];
// x=1 是因为 max = arr[0]; 下标为 0 的元素直接和下标为 1 的元素进行比较即可
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
max = arr[x];
}
return max;
}
第二种方式:
public static int getMax_2(int[] arr)
{
// 定义变量, 记录较大元素的角标
int maxIndex = 0;
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[maxIndex])
maxIndex = x;
}
return arr[maxIndex];
}
// 3.1 选择排序
// 大圈套小圈, for 嵌套(尖朝下三角形)
// 由于直接在数组本身进行操作,故没有返回值
public static void selectSort(int[] arr)
{
// 数组本身的遍历(外循环), 注意此时的条件
for(int x=0; x<arr.length-1; x++)
{
// 数组中一个元素,和它后面每一元素比较(内循环)
for(int y=x+1; y<arr.length; y++)
{
// 外循环和内循环的值进行比较
// 如果前者大于后者, 互换位置
if(arr[x]>arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
// 为提高性能,可以将最小值的角标记录,比较完成后,在完成换位
public static void selectSort_2(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
int num = arr[x];
int index = x;
for(int y=x+1; y<arr.length; y++)
{
if(num>arr[y])
{
num = arr[y];
index = y;
}
}
if(index!=x)
{
int temp = arr[x];
arr[x] = arr[index];
arr[index] = arr[x];
}
}
}
// 3.2 冒泡排序
// 大圈套小圈
public static void bubbleSort(int[] arr)
{
// 外循环控制循环次数
for(int x=0; x<arr.length-1; x++)
{
// 内循环进行相邻比较
// 其中 -1 为了避免角标越界
// -x 为了让外循环增加一次,内循环参与比较的元素递减
for(int y=0; y<arr.length-1-x; y++)
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
// 4. 查找
// 查找数组中是否存在指定元素,存在,返回第一次出现的下标值
public static int getIndex(int[] arr, int key)
{
for(int x=0; x<arr.length; x++)
{
if(arr[x]==key)
return x;
}
// 如果数组中没有要查找的元素, 而本函数使有返回值的
// 因此,必须要有下面这句.否则,编译失败.
return -1;
}
// 5. 折半查找 (二分查找)
// 前提: 被查找的数组必须是**有序**的
// 需求: 查找 1~100 之间的一个数字
// 第一种方式:
public static void halfSearch(int[] arr, int key)
{
// 数组中元素并不一定按照特定顺序排列,
// 但是数组中元素的角标从小到大排列的
int max, min, mid;
min = 0;
max = arr.length-1;
mid = (max + min)/2;
while(arr[mid] != key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
if(max<min)
return -1;
mid = (max+min)/2;
}
return mid;
}
// 第二种方式:
public static void halfSearch_2(int[] arr, int key)
{
int min, max, mid;
min = 0;
max = arr.length-1;
while(min <= max)
{
mid = (min+max)>>1; //左移1位,相当于除以2
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
/*
思考:
给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
那么这个元素存储的角标如何获取?
*/
// 备注: java 自带的二分查找: Arrays.binarySearch();
// 如果找不到该元素,返回: -min-1, 即 -元素插入点 - 1;
_参考资料:_
- [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3087889/#page=2)
Java 语言基础之数组常见操作的更多相关文章
- Java之--Java语言基础组成—数组
Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- 【JAVA基础】05 Java语言基础:数组
1. 数组概述和定义格式说明 为什么要有数组(容器) 为了存储同种数据类型的多个值 数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用 ...
- Java 语言基础之数组应用
什么时候使用数组呢? 如果数据出现了对应关系, 而且对应关系的一方是有序的数字编号, 并作为角标使用. 这时,就必须要想到数组的使用. 也就是将这些数据存储到数组中, 根据运算的结果作为角标, 直接去 ...
- Java语言基础之数组
引出数组和数组的定义 为什么要使用数组: 问题一: 声明变量时,每一个单独的变量都要对应一个变量名,但现在要处理一组相同类型的数据时,如要表示班上100个人的年纪,绝不能定义100个变量来表示每一个人 ...
- Java 语言基础之数组(一)
数组定义及格式: 数组: 同一种类型数据的集合, 就是一个容器 定义数组格式1: 元素类型[] 数组名 = new 元素类型[元素个数(即数组长度)]; 说明: 数组是一个容器.而容器属于一个实体,实 ...
- day01<计算机基础知识&Java语言基础>
计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...
- day05<Java语言基础--数组>
Java语言基础(数组概述和定义格式说明) Java语言基础(数组的初始化动态初始化) Java语言基础(Java中的内存分配以及栈和堆的区别) Java语言基础(数组的内存图解1一个数组) Java ...
- Java语言基础(数组)
Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...
随机推荐
- C#生日提醒小工具
一个很粗糙的版本,就当一个小例子看一下吧, 运行效果如下: 开发环境VS2017,用的WinForm,涉及一点xml,直接上图. 一.项目涉及的文件如下图: 二.每个文件内容: 1.MainForm ...
- C++父子类继承时的隐藏、覆盖、重载
存在父子类继承关系时,若有同名成员函数同时存在,会发生隐藏.覆盖和重载这几种情况.对于初学者也比较容易混淆,为此,我整理了一下我的个人看法,仅供参考.希望对大家理解有帮助,也欢迎指正. 1.父子类继承 ...
- builtroot make menuconfig流程
本文主要介绍一下,buildroot(buildroot-2018.02.1)的make menuconfig.众所周知,在我们执行menuconfig时,会生成一个图形化界面,然后进行相关的配置.同 ...
- O(1)取Queue中的最大值
实现原理: 1.利用Stack的先进后出的特性,实现一个MaxStack,MaxStack中用一个Stack记录当前的值,一个Stack记录当前的最大值. 2.用2个MaxStack实现MaxQueu ...
- hdu 1022 Train Problem
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 【问题记录】mybatis开启事务方法时,一级缓存可能引发的问题
首先,上代码: public void listMybatisModel() { List<MybatisModel> mybatisModels = mapper.listMybatis ...
- InnoDB: auto-extending data file ./ibdata1 is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
问题描述: centos 安装MySQL $yum install mysql-server 安装之后执行命令mysql 报错: 查看mysql的启动日志: [ERROR] InnoDB: auto- ...
- 【vijos】1750 建房子(线段树套线段树+前缀和)
https://vijos.org/p/1750 是不是我想复杂了.... 自己yy了个二维线段树,然后愉快的敲打. 但是wa了两法.......sad 原因是在处理第二维的更新出现了个小问题,sad ...
- retrival and clustering : week 3 k-means 笔记
华盛顿大学 machine learning 笔记. K-means algorithm 算法步骤: 0. 初始化几个聚类中心 (cluster centers)μ1,μ2, … , μk 1. 将所 ...
- opencv2.4.9+VS2010配置
opencv2.4.9 https://pan.baidu.com/s/15b5bEY65R4CptayEYVAG4A 安装包路径:D:\文件及下载相关\文档\Tencent Files\845235 ...