什么是数组2025年3月17日 | 阅读 7 分钟 数组是一种数据结构,其中值或项以线性顺序排列,这意味着分配给每个项的内存是连续的。数组中所有元素的`数据类型`都是相同的。 由于内存是连续分配的,因此通过知道第一个内存位置并加上偏移量,就可以轻松地找出数组中任何元素的内存位置。 例如 ![]() 在上面的示例中,我们有一个整数数组,内存位置是连续的,每个整数占用 4 个字节,起始地址为 4000。 一旦声明了数组,我们就无法动态地增加或减少其大小。在大多数编程语言中,内存分配是静态的,因此我们必须在声明数组时指定其大小。 数组中的索引我们可以通过数组中的索引号来识别和访问每个值。 例如,在零基索引中,`arr[1]` 将用于访问数组的第二个元素。 数组索引可以有以下类型: 零基索引如果数组的第一个值索引为 0,则称为零基索引。大多数编程语言都遵循零基索引。 一基索引如果数组索引从 1 开始,则称为一基索引。这意味着数组的第一个值将被分配索引 1。 N基索引当第一个元素的索引可以是任何值,甚至可以是负值时,则称为 N 基索引。 数组中的初始化方法在 Java 中,有多种方法可以声明和初始化数组。 1. 使用 'new' 关键字借助 `new` 关键字,我们可以为数组分配特定大小的内存。在 Java 中,当我们使用 `new` 关键字时,它会在堆中分配内存,因此它会静态地分配内存。 例如 在上面的代码中,我们声明了一个大小为 12 的整数类型数组。我们使用 `new` 关键字分配了可以存储 12 个整数的内存。 2. 通过直接赋值初始化和声明数组的另一种方法是直接在数组中插入值,而无需使用 `new` 关键字和指定数组大小。 例如 在上面的示例中,我们同时声明了数组并对其进行了初始化。 数组上的各种操作1. 插入操作如果数组中有任何值,我们可以将其插入到数组的任何索引处,但新值必须具有相同的数据类型。 示例 输出 old array is : 1 2 3 4 5 6 new array is : 1 2 98 4 5 6 说明 在上面的代码中,我们使用一些值声明了一个整数数据类型的数组。现在,我们在索引二处插入了一个新值 98,并更改了数组。 时间复杂度:O(1) 或常数时间复杂度。 2. 访问任何元素要访问数组中的任何元素,只需使用其索引号即可访问。 示例 输出 4th element in the array is 4 说明 在上面的代码中,我们声明并初始化了一个数组,然后使用索引号 3(零基索引)访问了数组的第四个值。 时间复杂度: O(1) 3. 搜索元素我们可以搜索数组中的任何元素。它可能存在于数组中,也可能不存在。我们可以使用线性搜索或二分搜索进行搜索操作。 示例 输出 we found the target value 说明 在上面的代码中,我们有一个数组和一个目标值。我们将一个循环应用于数组并搜索目标元素。由于我们在数组中找到了目标值,因此我们退出了循环并打印了语句。 时间复杂度 O(N),其中 N 是数组中的元素数量。 在排序数组中,我们也可以使用二分搜索方法来降低时间复杂度。 二分搜索的时间复杂度:O(logN) 二分搜索示例输出 target is not present 说明 在上面的代码中,我们使用二分搜索方法在数组中搜索目标元素。
4. 排序数组排序基本上是指以特定顺序(升序或降序)排列或重新排序数组的元素。数组中有许多排序技术,例如冒泡排序、插入排序、归并排序、选择排序、基数排序、堆排序等。 示例 输出 array before sorting is: 5 3 7 8 4 6 1 array after sorting is: 1 3 4 5 6 7 8 说明 在上面的代码中,我们使用冒泡排序方法以升序对给定数组进行排序。我们有一个未排序的整数数组。我们比较了每个相邻的值,如果它们不按正确的顺序排列,就交换了它们。 时间复杂度:O(n2) O(n2) 时间复杂度:冒泡排序、选择排序、插入排序 o(nlogn) 时间复杂度:归并排序、快速排序等。 数组的类型根据维度,数组可以有多种类型,因此我们主要将其分为两类: 1. 一维数组当数组的元素以线性方式排列时,称为一维数组。这是我们在问题中通常使用的一种基本数组。 2. 多维数组当数组有多个维度时,称为多维数组。它可以是二维、三维或更多维的。 示例 输出 2D array is : 1 2 3 4 5 6 7 8 9 说明 在上面的代码中,我们创建了一个整数数据类型的二维数组。 数组的优点
数组的缺点
数组的应用
下一个主题实际拜占庭容错 (pBFT) |
我们请求您订阅我们的新闻通讯以获取最新更新。