Java实例 Part4:数组及其常用操作
@
Part4:数组及其常用操作
- 数组:具有相同数据类型的数据的集合,可以存储基本数据类型的数据和引用类型的数据。数组是在内存中分配的一连串的空间。
- 声明方法:(以整型数组为例)
一维数组:int[] array 或 int array[];
二维数组:int[][] array 或 int array[][]; - Java语言中声明数组时不能指定其长度(数组中元素的数),应该是
int[] array = new int[10];
Example01:将二维数组的行列交换
运行结果:
实现代码:
public class Example01 {
public static void main(String[] args) {
int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
System.out.println("行列调换前:");
exchange(array);
int[][] newArray = new int[array.length][array.length];
for (int i = 0;i<array.length;i++) { //调整数组行列数据
for (int j = 0; j < array.length; j++) {
newArray[i][j] = array[j][i];
}
}
System.out.println("行列调换后:");
exchange(newArray);
}
public static void exchange(int[][] array){
for (int i = 0;i<array.length;i++){ //遍历数组
for (int j = 0;j<array.length;j++){
System.out.print(array[i][j]+"\t");
}
System.out.println();
}
}
}
要点: 创建两个相同大小的数组,并使用双层的for循环遍历这两个二维数组,同时把新数组与原数组的行列索引交换进行元素赋值,从而实现行列互换的功能。
Example02:使用选择排序法对数组进行排序
选择排序(Selection Sort)是一种简单直观的排序算法。
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。过程如下:
初始数组 【63 4 24 1 3 15】
第一趟排序 【4 24 1 3 15】 63
第二趟排序 【4 1 3 15】 63 24
第三趟排序 【4 1 3】 15 24 63
第四趟排序 【1 3】 4 15 24 63
第五趟排序 【1】 3 4 15 24 63
运行结果:
实现代码:import java.util.Random; public class Example02 {
public static int[] array = new int[10];
public static void main(String[] args) {
Random random = new Random();
System.out.println("初始数组为:");
for (int i = 0;i<array.length;i++){
array[i] = random.nextInt(50);//生成50以内的随机数组
System.out.print(array[i]+" ");
}
System.out.println("\n选择排序后的数组为:");
SelectSort(array);
}
public static void SelectSort(int[] array){
int index = 0;
for (int i = 0;i<array.length-1;i++) {
index = i;
for (int j = i+1; j < array.length; j++) {
if (array[j]<array[index]) {
index = j;
}
}
//交换在array.length-i和index(最大值)位置的两个数
if (i != index) {
int temp = array[i];
array[i] = array[index];
array[index] = temp;
}
}
for (int num:array) {
System.out.print(num+" ");
}
}
}
要点:利用选择排序法从数组中挑选最大值并放在数组最后,而遇到重复的相等值不会做任何处理,所以如果程序允许数组有重复值的情况,建议使用选择排序法,因为它的数据交换次数较少,相对速度也会稍微提升,这取决于数组中重复值的数量。
Example03:使用冒泡排序法对数组进行排序
运行结果:
实现代码:
import java.util.Random;
public class Example03 {
public static int[] array = new int[10];
public static void main(String[] args) {
Random random = new Random();
System.out.println("初始数组为:");
for (int i = 0; i < array.length; i++) {
array[i] = random.nextInt(50);//生成50以内的随机数组
System.out.print(array[i] + " ");
}
System.out.println("\n冒泡排序后的过程为:");
BubbleSort(array);
}
public static void BubbleSort(int[] array){
for (int i = 1;i<array.length;i++) {
//比较相邻两个元素,较大的往后冒泡
for (int j = 0; j < array.length - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j]; //把第一个元素值保存到临时变量中
array[j] = array[j + 1]; //把第二个元素值保存到第一个元素单元中
array[j + 1] = temp; //把临时变量也就是第一个元素原值保存到第二个元素中
}
System.out.print(array[j]+" ");
}
System.out.print("【");
for (int j = array.length-i;j<array.length;j++){
System.out.print(array[j]+" ");
}
System.out.print("】\n");
}
}
}
- 要点:冒泡排序的基本思想是对比相邻元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面。冒泡算法在双层循环中实现,其中外层循环中实现,是要排序数组长度-1次。而内层循环主要是用于比较临近元素的大小,以确定是否交换位置,对比和交换次数依排序轮数而减少。
Example04:使用快速排序法对数组排序
- 快速排序(Quick Sort)是对冒泡排序的一种改进,其排序速度相对较快。
- 过程如下:(通常选第一个数据)
先用基准值和最后一个值比较,直到找到第一个比基准值小的值才交换。找到这个值后,又从前往后开始比较,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前的索引,结束第一次循环。
运行结果:
实现代码:
import java.util.Random;
public class Example04 {
public static int[] array = new int[10];
public static void main(String[] args) {
Random random = new Random();
System.out.println("初始数组为:");
for (int i = 0;i<array.length;i++){
array[i] = random.nextInt(50);//生成50以内的随机数组
System.out.print(array[i]+" ");
}
System.out.println("\n快速排序法的过程如下:");
QuickSort(array,0,array.length-1);
}
public static void QuickSort(int[] array,int low,int high) {
int min = low;
int max = high;//最小索引和最大索引
int key = array[low]; //分界点元素
while (min < max) {
//从后往前比较
while ((min < max) && (array[max] >= key)) {
//如果没有比关键值小的比较下一个,直到找到比分界点小的交换位置
max--;
}
if (min < max){
swap(array,min,max);
min++;
}
while ((min < max) && (array[min] <= key)) {
//直到找到比关键值大的交换位置
min++;
}
if (min < max) {
swap(array, min, max);//交换两个索引的值
max--;
}
}
//对key左边快排
if (min > low) {
QuickSort(array, low, min - 1);
}
//对key右边快排
if (max < high) {
QuickSort(array, min + 1, high);
}
}
public static void swap(int swapArray[],int i,int j){
int t = swapArray[i];
swapArray[i] = swapArray[j];
swapArray[j] = t;
for (int k = 0;k<array.length;k++){
System.out.print(array[k]+" ");
}
System.out.println();
}
}
要点:快速排序法的基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后再按此方法对这两部分数据进行快速排序。整个排序过程可以递归进行,以此使整个数据变成有序数列。
- 快速排序还有更高效的实现方法,请尝试。------
Example05:使用直接插入法对数组进行排序
- 插入排序的思想:将n个有序数存放在数组a中,要插入的数为x,首先确定x插在数组中的位置p,数组中p之后的元素都后移一个位置,空出a(p),并将x插入进去。
运行结果:
实现代码:
import java.util.Random;
public class Example05{
public static int[]array=new int[7];
public static void main(String[]args){
Random random=new Random();
System.out.println("初始数组为:");
for(int i=0;i<array.length;i++){
array[i]=random.nextInt(50);//生成50以内的随机数组
System.out.print(array[i]+" ");
}
System.out.println("\n直接插入排序法后的数组为:");
InsertSort();
}
public static void InsertSort(){
int t,j;
for(int i=1;i<array.length;i++){
t = array[i];
for (j = i-1;j >= 0 && array[j] > t;j--){
array[j+1] = array[j]; //数组元素交换
}
array[j+1] = t;
}
for (int a:array){
System.out.print(a+" ");
}
}
}
- 在使用排序算法时,开发人员必须手动编写一堆代码,有的实现起来比较麻烦。Java的Arrays类提供了sort(),使用该方法对数组进行排序,大大降低了数组排序的难度。
Example06:使用sort()方法对数组排序
运行结果:
代码实现:
import java.util.Arrays;
import java.util.Scanner;
public class Example06 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
String s = scanner.nextLine();
String[] array = s.split(" "); //拆分输入的数组
int[] newArray = new int[array.length]; //创建整型数组
System.out.println("初始数组为:");
for (String string : array){
System.out.print(string+" ");
}
for (int i = 0;i<array.length;i++){ //初始化整型数组
newArray[i] = Integer.parseInt(array[i]);
}
Arrays.sort(newArray); //使用sort()方法对整型数组排序
System.out.println("\nsort()排序后的结果为:");
for (int a : newArray){
System.out.print(a+" ");
}
}
}
- 要点:Arrays类提供了创建、操作、搜索和排序数组的方法。Arrays类位于java.util包,它是数组的一个工具类,包含很多方法,它有很多重载格式,可以接收任何数据类型的数组并执行不同类型的排序。
Java实例 Part4:数组及其常用操作的更多相关文章
- Java-Runoob-高级教程-实例-方法:02. Java 实例 – 输出数组元素
ylbtech-Java-Runoob-高级教程-实例-方法:02. Java 实例 – 输出数组元素 1.返回顶部 1. Java 实例 - 输出数组元素 Java 实例 以下实例演示了如何通过重 ...
- ylbtech-Java-Runoob-高级教程-实例-数组:15. Java 实例 – 判断数组是否相等
ylbtech-Java-Runoob-高级教程-实例-数组:15. Java 实例 – 判断数组是否相等 1.返回顶部 1. Java 实例 - 判断数组是否相等 Java 实例 以下实例演示了如 ...
- Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素
ylbtech-Java-Runoob-高级教程-实例-数组:14. Java 实例 – 在数组中查找指定元素 1.返回顶部 1. Java 实例 - 在数组中查找指定元素 Java 实例 以下实例 ...
- Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素
ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素 Java 实例 以下实例演示了如何使用 ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度-*
ylbtech-Java-Runoob-高级教程-实例-数组:03. Java 实例 – 获取数组长度 1.返回顶部 Java 实例 - 获取数组长度 Java 实例 本文我们将为大家介绍如何使用数 ...
- pandas_一维数组与常用操作
# 一维数组与常用操作 import pandas as pd # 设置输出结果列对齐 pd.set_option('display.unicode.ambiguous_as_wide',True) ...
- JavaScript之数组的常用操作函数
js对数组的操作非常频繁,但是每次用到的时候都会被搞混,都需要去查相关API,感觉这样很浪费时间.为了加深印象,所以整理一下对数组的相关操作. 常用的函数 concat() 连接两个或更多的数组,并返 ...
- js对数组的常用操作
在js中对数组的操作是经常遇到的,我呢在这就列一下经常用到的方法 删除数组中的元素: 1.delete方法:delete删除的只是数组元素的值,所占的空间是并没有删除的 代码: var arr=[12 ...
随机推荐
- SQL Server中【case...end】的用法
在SQL Server中 case...end 语句,一般有如下两种用法: 1.相当于C#中if...else,例: select CName,头衔=case when CLevel='A1' the ...
- ActiveMQ 用户名密码设置
用户名密码信息保存在conf/jetty-realm.properties文件中 按顺序分别是:用户名.密码.角色名 另:ActiveMQ使用的是jetty服务器, 可以通过设置conf/jetty. ...
- winfrom 实现窗体圆角
在窗体中加入一下代码 #region 窗体圆角的实现 private void ComFrmBase_Resize(object sender, EventArgs e) { if (this.Win ...
- [翻译] KGModal
KGModal KGModal is an easy drop in control that allows you to display any view in a modal popup. The ...
- CentOS安装和部署SVN服务器
1.安装SVN 通过yum安装svn [root@localhost webber]# yum install subversion 查看svn是否安装成功 [root@localhost webbe ...
- ZT 布列瑟农
布列瑟农 编辑 <布列瑟农>(Bressanone)是加拿大环保音乐家马修·连恩(Matthew Lien)创作并演唱的一首经典歌曲,收录在他1995年的专辑<狼>(Bleed ...
- CXF+JAXB处理复杂数据
CXF+JAXB处理复杂数据 CXF默认使用JAXB 来实现对象和XML之间的映射.在前面的例子 中,使用CXF发布的Webservice,其方法的参数和返回值都是简单类型. 本文讨论对象复杂性的 ...
- [TJOI2018]智力竞赛
题目 发现我们需要最大化最小值,基本是二分了 那么我们二分出来一个值我们将小于等于这个值的都删去,现在的问题变成了如何用\(n+1\)条路径覆盖这张图 这不最小路径覆盖吗 于是我就忘了最小路径覆盖怎么 ...
- 20155203 2016-2017-4 《Java程序设计》第9周学习总结
20155203 2016-2017-4 <Java程序设计>第9周学习总结 教材学习内容总结 课堂内容 两个类如果有公共的部分要放在父类中,多次复用.当我们用父类或接口去声明对象的引用生 ...
- HTML5本地存储——IndexedDB
在HTML5本地存储——Web SQL Database提到过Web SQL Database实际上已经被废弃,而HTML5的支持的本地存储实际上变成了 Web Storage(Local Stora ...