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.数组基本概念 数组是 ...
随机推荐
- Java NIO系列1-概观
Java NIO系列1-概观 Java NIO.中间的N你既可以理解为(new),也就是新的IO,相对于java1.5之前的IO它确实是新的;也可以理解为(no-blocking),也就是非阻塞的IO ...
- C++中STL常用容器的优点和缺点
我们常用到的STL容器有vector.list.deque.map.multimap.set和multiset,它们究竟有何区别,各自的优缺点是什么,为了更好的扬长避短,提高程序性能,在使用之前需要我 ...
- UOJ#172. 【WC2016】论战捆竹竿 字符串 KMP 动态规划 单调队列 背包
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ172.html 题解 首先,这个问题显然是个背包问题. 然后,可以证明:一个字符串的 border 长度可 ...
- vscode断点调试本地客户端文件
一.安装chrome,安装vscode,打开vscode编辑器,安装插件Debugger for Chrome 二.新建文件 1.目录结构 . ├── index.html ├── index.js ...
- Django路由机制
Django的URL路由配置: Settings.py文件中的ROOT_URLCONF变量指定全局路由文件名称 ROOT_URLCONF = '工程名称.urls' #默认对应工程目录下urls. ...
- C_使用clock()函数获取程序执行时间
clock():捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tick ,即“时钟打点”. 常数CLK_TCK:机器时钟每秒所走的时钟打点数. #include & ...
- html5 Canvas绘制时钟以及绘制运动的圆
1.绘制时钟 <!-- js代码 --> <script type="text/javascript"> window.onload=function(){ ...
- __x__(45)0910第六天__各种表单
效果图: html代码: <!doctype html> <html> <head> <meta charset="utf-8" /> ...
- Selenium 3----设置元素等待
在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...
- CentOS启动docker1.13失败(Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.)
一.启动失败 1.启动docker [root@localhost ~]# systemctl start docker Job for docker.service failed because t ...