数组总结
数组的声明:
类型 [] 数组名 或 类型 数组名[]
声明数组时不能指定其长度。
数组的创建:
Java中使用关键字new创建数组对象,格式为:
数组名 = new 数组元素的类型 [数组元素的个数]
数组的结构:
在内存中的空间是线性的。其传递为引用传递,即传首地址。一旦创建数组,数组大小便不可改变。length属性表示其大小。
【数组排序】
稳定算法:冒泡排序、插入排序、归并排序和基数排序。
不稳定算法:选择排序、快速排序、希尔排序、堆排序。
稳定性的概念(摘自百度百科):
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
即判断排序后原来相同元素的先后顺序是否发生改变,若是,则不稳定。
冒泡排序:
比较相邻两个元素的大小,将较小的元素向前调整。若相邻元素相同,则不需要调整,故先后顺序不会改变。故为稳定算法。
例:
4 3 5 4# 6
3 4 5 4# 6
3 4 5 4# 6
3 4 4# 5 6
3 4 4# 5 6
3 4 4# 5 6
选择排序:
依次给每个位置选择最小元素,交换对应位置的元素。
例:
5 5# 2 1
1 5# 2 5
1 2 5# 5
可看出5和5#的位置发生了变化。故是不稳定算法。
插入排序:
是在一个已经有序的小序列的基础上,一次插入一个元素。只有第一个元素,就是第一个元素。想要插入的元素和已经有序的最大者开始比。
例:(|之前为有序,|后一个为要插入的元素)
2| 5 4 9 8 1 5#
2 5| 4 9 8 1 5#
2 4 5| 9 8 1 5#
2 4 5 9| 8 1 5#
2 4 5 8 9| 1 5#
1 2 4 5 8 9| 5#
1 2 4 5 5# 8 9|
对于两个相同元素,后一个元素在插入时,从有序序列末位开始往前比较,当遇到相同元素后停止,并不交换顺序(仍在后面)。故为稳定的。
希尔排序:
将整个序列分成若干子序列,分别进行插入排序。实际上是分组插入。虽然插入排序是稳定的,但在不同组别的排序过程中,相同的元素可能发生交叉,稳定性就会被打乱,所以希尔排序是不稳定的。
例:
49 38 65 97 76 13 27 49# 55 04 (初始)
13 27 49# 55 04 49 38 65 97 76 (步长为5)
13 04 49# 38 27 49 55 65 97 76 (步长为3)
04 13 27 38 49# 49 55 65 97 76 (步长为1)
可看出两个49的相对顺序变了。
附:上述四种排序算法的源代码
/** * 对给定一维数组做冒泡排序 * @param arrayOne 需要排序的数组 * @return 经过排序的数组 */ public int[] paixu_maopao(int [] arrayOne) { for (int i = 0; i < arrayOne.length; i++) { for (int j = i+1; j <arrayOne.length; j++) { if(arrayOne[i]>arrayOne[j]){ int temp=arrayOne[j]; arrayOne[j]=arrayOne[i]; arrayOne[i]=temp; }printArrayOne(arrayOne); } } return arrayOne; } /** * 对给定一维数组做选择排序 * @param arrayOne 需要排序的数组 * @return 经过排序的数组 */ public int[] paixu_xuanze(int [] arrayOne) { for (int i = 0; i < arrayOne.length; i++) { int low=i; for (int j = i+1; j < arrayOne.length; j++) { if(arrayOne[j]<arrayOne[low]){ low=j; }//printArrayOne(arrayOne); } int temp=arrayOne[i]; arrayOne[i]=arrayOne[low]; arrayOne[low]=temp; } return arrayOne; } /** * 对给定一维数组做插入排序 * @param arrayOne 需要排序的数组 * @return 经过排序的数组 */ private int[] paixu_charu(int [] arr) { for (int i = 1; i < arr.length; i++) { for (int j = i; j > 0; j--) { if(arr[j-1]>arr[j]){ int temp=arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; } } } return arr; } /** * 对给定一维数组做希尔排序 * @param arrayOne 需要排序的数组 * @return 经过排序的数组 */ private int [] paixu_xier(int [] arr) { for(int inc=arr.length/2; inc>0;inc/=2){ for (int i = inc; i < arr.length; i++) { int temp = arr[i]; int j=0; for (j = i ;j >= inc; j-=inc) { if(temp < arr[j-inc]){ arr[j]=arr[j-inc]; }else{ break; } } arr[j]=temp; } } return arr; }
相关推荐
在这个"java数组总结共9页.pdf.zip"的文档中,我们很可能会找到关于Java数组的全面概述,包括其定义、创建、初始化、操作以及一些重要的特性。下面是对Java数组的详细解释。 一、数组的定义 在Java中,数组是一种...
### Java数组总结使用手册 #### 一、数组基础概念 **1.1 什么是数组** 数组是一种基本的数据结构,用于存储一系列相同类型的元素。在Java中,数组是一种对象,它包含固定数量的相同类型的元素。数组中的每一个...
### Java数组与内存控制 #### 一、Java数组在内存分配方面的知识 ##### 1.1 数组初始化 - **声明数组的时候如何分配内存:** - 在Java中,数组的声明并不直接分配内存,而仅仅是创建了一个数组引用变量。例如: ...
对数组的总结和分析,通过这个结构记住它,在开发的过程中使用
本篇文章总结了十个重要的Java数组操作方法,适用于学习和复习Java编程知识。 1. **声明数组**: 在Java中声明数组时,我们需要指定数组的类型,然后用大括号{}初始化数组。例如,声明一个包含五个字符串的数组: ...
总结,Java数组作为基本的数据结构,是程序设计的基础。理解其创建、访问、遍历和操作方法,以及与字符串、集合的区别和联系,对于编写高效、可靠的Java代码至关重要。同时,熟练掌握`Arrays`类的使用能进一步提升...
总结,Java数组是编程基础,理解其概念、创建和操作方法对于编写高效、可靠的代码至关重要。在实际编程中,根据需求选择合适的数据结构,如数组或集合,是解决问题的关键。通过深入学习和实践,可以更好地掌握数组这...
### Java数组和字符串详解 #### 实验目标与背景 本次实验旨在深化理解Java中的数组与字符串操作,聚焦于`String`类与`StringBuffer`类的掌握,包括它们的常用方法、相等性判断的不同方式、数组的创建及引用机制,...
### Java数组讲解 #### 1. 数组基本概念与初始化 - **定义**: 数组是一种基本的数据结构,用于存储相同类型的多个元素。这些元素在内存中是连续存储的。 - **初始化**: 可以通过两种方式进行初始化:动态初始化和...
Java数组操作方法总结 Java数组操作方法总结是Java编程语言中一种基本的数据类型,数组是由一组相同类型的变量所组成的数据类型,它们以一个共同的名称表示,数组中的个别元素则以标注来表示其存放的位置。本文将...
java数组总结文档
Educoder题目:Java入门 - 数组进阶答案解析
### Java数组与字符串用法小结 在Java编程语言中,数组和字符串是两种非常重要的数据类型,它们在处理大量数据或文本时扮演着至关重要的角色。本文将围绕标题“java数组与字符串用法小结”及描述中的知识点进行详细...
### Java数组遍历方法集合 在Java编程语言中,数组是一种基本的数据结构,用于存储同类型数据元素的集合。为了处理这些数据元素,通常需要遍历数组中的每一个元素来进行访问或操作。本文将详细介绍三种常用的Java...
在Java编程语言中,数组是一种特殊的对象,它用于存储同类型的多个数据项。数组的定义、创建和使用是Java编程的基础,而方法数组则引入了更高级的概念,允许我们在一个数组中存储方法引用。让我们深入探讨这两个主题...
在Java编程语言中,数组是一种固定...总结来说,理解Java中的数组类型和`ArrayStoreException`是编写安全、无错代码的关键。避免此异常的最佳实践是确保在存储元素时类型兼容,并在必要时进行适当的类型检查和转换。
我对Java中数组的方法做了一下总结,希望能帮到各位