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.数组基本概念 数组是 ...
随机推荐
- 饮冰三年-人工智能-Python-21 Python数据库MySql
一:下载与安装 1:下载地址:https://dev.mysql.com/downloads/mysql/ 2:安装MySql 打开下载文件解压到指定文件目录.(我这里解压目录为D:\MySql\my ...
- 金蝶K/3 审批相关SQL语句
金蝶K/3 审批相关SQL语句 --http://127.0.0.1/lightApp/todocheckTask.aspx?AccID=84&&FClasstypeID=1071&a ...
- Intellij Idea调试java文件时 怎么跳过class文件?
Intellij Idea调试时 java文件时,遇到class文件时它也会反编译该文件,并跳入该class文件内一条条语句执行.这让我烦透了,怎么跳过class文件,继续调试啊? SETTINGS- ...
- 《学习之道》第八章孤军奋战or组队合作
孤军奋战与组队合作:别再苦思冥想,拖延行为需要差别对待 对拖延我得提一个小建议,你要暂时把自己与那些会干扰你的人和事隔离开.自己到一个房间里去,或者去图书馆,这样就没什么事能让你分心了. 如果一门课让 ...
- [转]一个普通IT人的十年回顾---金旭亮
金旭亮老师十年体会,很有收获.转自网络. 金旭亮于1989年与超级解霸的开发者梁肇新同时迈入广西大学的校门,却走了一条与其不同的路. 1994年起开始自学计算机专业本科课程,并开始编程,从未间断,迄今 ...
- css结构选择器组合使用,选择父元素中多个子元素中某一段元素
nth-of-type()和nth-child()写法一样,这里只用nth-of-type()演示,习惯type 直接上代码 /* 从前向后选择,第6个开始 */ li:nth-of-type(n+6 ...
- nginx+vsftp图片下载java代码上传
系统环境:阿里云centos7.3 安装nginx 查看nginx进程 ps aux|grep nginx 在/usr/local/nginx/sbin/目录下 nginx启动 ./nginx 快速停 ...
- 《C和指针》---指针
内存和地址 计算机的内存由许多的位(bit)组成,每个位可以容纳值0或1. 由于一个位所能表示的范围太有限,所以通常许多位合成一组作为一个单元. 这些位置的每一个都被称为字节(byte),每个字节包含 ...
- python is, ==区别
“is” is the identity comparison. #比较引用是否相同 “==” is the equality comparison. #比较内容是否相同 >>> [ ...
- Linq 动态组合排序(Lambda)
最近有个项目需要做一个排班的功能,需要对排班的数据按不同的规则进行排序:因为排序规则是动态变化的,所以不太适合放到数据库中(临时表)中处理: 所以考虑使用Linq的排序方式(按不同的条件判断条件组合排 ...