前言:

在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中数组的几个常用算法:插入算法,删除算法,冒泡排序算法的更多相关文章

  1. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  2. 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[ ...

  3. Java中数组的特性

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具 ...

  4. 在java 中,数组与 List<T> 类型的相互转换

    在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 ...

  5. Java中数组的初始化方式

    Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...

  6. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  7. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...

  8. java中数组、集合、字符串之间的转换,以及用加强for循环遍历

    java中数组.集合.字符串之间的转换,以及用加强for循环遍历: @Test public void testDemo5() { ArrayList<String> list = new ...

  9. Java 中数组的内存分配

    Java 中数组的内存分配 1.Java 程序在运行时,需要在内存中分配空间.为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据和内存管理方式. 2.数组基本概念 数组是 ...

随机推荐

  1. Jmeter性能测试之Monitor监控(四)

    使用Jmeter(该篇文章使用的版本最高为3.1, 3.1+的版本存在兼容性问题)做性能测试, 要监控服务器硬件资源消耗情况, 可以使用扩展插件完成. 1. 服务端插件下载agent, 点击这里 , ...

  2. 四.property

    将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则 # 例一:BMI指数(bmi是计算而 ...

  3. Kubernetes 学习1 k8s架构概述

    一.概述 1.意思:舵手,飞行员 2.特点 a.自动装箱,自我修复,水平扩展,服务发现和负载均衡,自动发布和回滚. b.密钥和配置管理,存储编排,批量处理执行. 二.架构术语 1.集群 master( ...

  4. 001 python基础实战

    报名了阿里大学的AI,一直没有学习,今天开始正式学习. 今天是第一节,Python的基础编程实战,里面包含两个示例. 一:任务实现文件的批量重命名. 1.创建一个目录 2.程序 #!/usr/bin/ ...

  5. C# ref与out关键字解析

    简介:ref和out是C#开发中经常使用的关键字,所以作为一个.NET开发,必须知道如何使用这两个关键字. 1.相同点 ref和out都是按地址传递,使用后都将改变原来参数的数值. 2.ref关键字 ...

  6. 远程连接你的linux服务器

    为什么要远程连接linux 在实际的工作场景中,虚拟机界面或者物理服务器本地的终端都是很少接触的,因为服务器装完系统之后,都要拉倒IDC机房托管,如果是购买的云主机,那更碰不到服务器本体了,只能通过远 ...

  7. Java菜鸟浅谈OCR

    什么是OCR? 粗暴点说就是图片文本识别!正规点的说法就是:(Optical Character Recognition,光学电子识别) 最近公司开展新项目,考虑到实名认证这方面,然后还要上传身份证正 ...

  8. virtualbmc 使用

    virtualbmc 介绍 通常情况下,我们要使用 IPMI必须使用有带外管理功能的物理机.但是在很多测试环境,我们使用的是虚拟机.virtualbmc是一个可以使用 IPMI命令来控制虚机的open ...

  9. centos安装svn并创建版本库配置用户分组权限

    1.设置aliyun安装源// 本步骤非必须, 使用aliyun安装源后, 执行yum update速度明显提升 wget -O /etc/yum.repos.d/CentOS-Base.repo h ...

  10. 转摘: MySQL详解--锁

    原文 http://blog.csdn.net/xifeijian/article/details/20313977 InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TR ...