Java中数组的几个常用算法:插入算法,删除算法,冒泡排序算法
前言:
在Java中我们常常会用数组,提到数组就不得不介绍数组中常用到的几个算法。
有插入算法,删除算法,冒泡排序算法等。
在学习这几个数组的算法前,我们先来了解一下关于数组一些基本知识。
数组的基本知识:
数组的定义:数组(Array)是相同数据类型的数据的有序集合。
数组是引用数据类型。
数组的三个特点:
[1]数组长度是确定。数组一旦申请完空间,长度不能发生变化,用length属性访问。
[2]数组的元素都是同一数据类型。
[3]数组是有序的 。每个元素通过下标/索引标记,索引从0开始。
关于内存的空间的一些知识:
内存分为两类:
栈(stack)内存:基本数据类型分配在栈内存,栈内存空间不需要开发者回收,系统会自动回收。栈空间占整个内存空间的比例较小。
堆(heap)内存:引用数据类型分配在堆内存,堆内存一定要开发者通过new 来申请,开发者申请的内存使用完成后一定要回收。jvm中有专门的垃圾回收机制(gc)回收使用完的堆内存。堆空间占整个内存空间的比例较大。
数组的几种声明方法:
例如
(1)int[] arr = new int[5];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
( 2 ) int[] arr2;
arr2 = new int[]{10,20,30,30,50};
(3)int[] arr2 = {10,20,30,40,50};
数组的算法:
(1)插入算法:一个数组有序,添加一个元素后,数组依然有序。
代码如下:
import java.util.Scanner; public class Test05{
public static void main(String[] args){
//一个数组有序,添加一个元素后,数组依然有序。
int[] arr = {1,3,7,9,10,13,0}; Scanner input = new Scanner(System.in);
System.out.println("请添加一个数:");
int t = input.nextInt();
//int t = 8;
//(1)找出位置
int loc = -1;
for(int i = 0;i < arr.length-1;i++){
if(arr[i] > t){
loc = i;
break;
}
}
System.out.println("loc=" + loc );
//(2)调t的位置
if(loc < 0){ //t在最后一位
arr[arr.length-1] = t;
}else{ //将loc后面几位数往后移动
for(int j = arr.length-1;j>loc;j--){
arr[j]=arr[j-1];
}
//将t放进去
arr[loc] = t;
}
//检验,遍历数组
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i]+ "\t");
}
}
}
(2)删除算法:一个有序的数组,删除一个元素后依然有序。
代码如下:
import java.util.Scanner;
public class Test06{
public static void main(String[] args){ //一个有序的数组,删除一个元素后依然有序。
int[] arr = {1,3,5,7,9,10,17,23}; //删除t
Scanner input = new Scanner(System.in);
System.out.println("请输入要删除的数:");
int t = input.nextInt();
//int t = 3; //(1)找出要删除的数的位置
int loc = -1;
for(int i = 0;i < arr.length;i++){
if(arr[i] == t){
loc = i;
break;
}
} //(2)移动元素
if(loc < 0){
System.out.println(t+"不在数组中");
}else{
for(int j = loc;j < arr.length-1;j++){
arr[j] = arr[j+1];
}
}
//最后一个元素置0
arr[arr.length-1] = 0;
//检验,遍历数组
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i] + "\t");
}
}
}
(3)冒泡排序算法作用:将一个无序的数组排列成有序的数组
代码如下:
public class Test07{
public static void main(String[] args){
//冒泡排序算法:用于将无序的数组排列成有序的
int[] arr = {3,2,1,4,7,5,9};
int temp = 0;
// 外层循环控制趟数
for(int i=0;i<arr.length;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.print(arr[i]+"\t");
}
}
}
Java中数组的几个常用算法:插入算法,删除算法,冒泡排序算法的更多相关文章
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- java中数组的相关知识
1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...
- Java中数组的特性
转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...
- 在java 中,数组与 List<T> 类型的相互转换
在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...
- Java中数组的初始化方式
Java中数组的初始化方式 初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...
- java中数组复制的两种方式
在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...
- Java中数组的插入,删除,扩张
Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...
- java中数组、集合、字符串之间的转换,以及用加强for循环遍历
java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...
- Java 中数组的内存分配
Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...
随机推荐
- SpringBoot Mybatis项目中的多数据源支持
1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 项目结构如下: 2. ...
- 【转】win10哪个版本最好用,推荐win10企业版LTSC
https://msdn.itellyou.cn/ win10企业版LTSC又被称为win10企业版2019长期服务版本,这个版本小编认为是目前最好用的win10版本,在win10企业版2016长期服 ...
- Vue基础语法
一.挂载点,模版和实例 二.Vue实例中的数据,事件和方法 1.v-html指令和v-text指令 v-html :不转义 v-text :转义过后的内容 <div id="root& ...
- process.argv
返回进程启动时的命令行参数. 第一个元素是 process.execPath. 使用 process.argv0 可以获取 argv[0] 原始的值. 第二个元素是当前执行的 JavaScript 文 ...
- Laravel 5 中间件、路由群组、子域名路由、 权限控制的基本使用方法
创建控制器: php artisan make:controller Admin/IndexController 创建Middleware: php artisan make:middleware T ...
- 思维导图工具XMind
思维导图工具XMind XMind简单介绍 官网地址:https://www.xmind.cn/ XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生.作为一款有效提升工作和生活效率 ...
- JDK配置环境变量不成功的原因
根据自己配置环境变量遇到的问题进行总结: 1.二次安装需要注意的问题 由于已经安装了一次的原因,此时的注册表已经有了安装记录. 建议删除jdk的记录 首先打开注册表 开始菜单→运行.或者直接键盘按下W ...
- 理解java关键字Synchronized(学习笔记)
之前学习了线程的一些相关知识,今天系统的总结下来 目录 1. Java对象在堆内存中的存储结构 2. Monitor管程 3. synchronized锁的状态变换以及优化 4. synchroniz ...
- UVA 548 Tree 建树
题意: 输入中序和后序的权值,输出哪个叶子使它到根的路径上权和最小. 思路: 输入后建树,然后dfs求最小的叶子. #include<iostream> #include<cstdi ...
- Django实例
更新:今年8月在深圳和嵩天老师居然见面了,很开心.嵩天老师很和蔼. =========== 今天看了嵩天老师的视频,感觉讲的很好,于是看着视频自己做了一个初步的实例认识. 步骤1,新建一个Web框架 ...