【小白转码】04

第四章

一、数组

1.数组的概念

数组(array),就是多个相同类型的数据按一定顺序排列的集合,并使用一个名字命名,然后用编号区分这些数据。

特点:1.长度一旦确认就不可改变

2.可以使用基础数据类型或者引用数据类型

 

2.声明与初始化

2.1 声明的两种方法

//推荐
int[] a;
//不推荐
int a[];

 

2.2初始化

2.2.1 静态初始化

//情况一:先声明再初始化
int[] a;
a = new int[]{1,2,3};

//情况二:声明加初始化
int[] a = new int[]{1,2,3};

//简化
int[] a  = {1,2,3};

2.2.2 动态初始化

//情况一:先声明再初始化
int a[];
a = new int[10];
//情况二:声明加初始化
int[] a = new int[10];

2.3 索引的使用

①访问指定元素

int[] a = new int[]{1,2,3};
//[0,2]
int b = a[2];//3

②指定位置赋值

int[] a = new int[3];
a[2] = 3;//3

2.4 数组的遍历

//利用for循环来处理
//length可以得出数组的长度
for(int i = 0;i < a.length;i++){
   System.out.println(a[i]);
}

 

3.算法

3.1 查找元素

3.1.1 顺序查找

int[] arr = {2, 3, 4, 5, 6};
int index = -1;//标记
int value = 1;//要查询的值

for(int i = 0;i < arr.length;i++){
  if(arr[i] == value){
      index = i;
  }
}

if(value == -1){
  System.out.println("没有");
}else {
  System.out.println(index);
}

 

3.2 冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端,最大值出现在最后位置。

//从小到大
//不断比较将极值先放到最后边
int[] arr = {2, 5, 3, 34, 4, 10, 6, 1, 46};
int min;

for (int i = 0; i < arr.length - 1; i++) {//比较的次数 有n个元素,需要比较n-1次
  for(int j = 0;j < arr.length - i - 1;j++){//每比较一次就会把极值放到末尾,所以比较的元素数量每一次都会减少一个。
      if(arr[j] > arr[j+1]){
          min = arr[j+1];
          arr[j+1] = arr[j];
          arr[j] = min;
      }
  }
}
for (int a :arr) {
  System.out.println(a);
}

3.3数组对调

 

int[] ints = {1, 2, 3, 4, 5};


for (int i = 0; i < ints.length/2; i++) {
  int a = ints[i];
  ints[i] = ints[ints.length - 1 - i];
  ints[ints.length - 1- i] = a;

}
for (int i = 0; i < ints.length; i++) {
  System.out.println(ints[i]);
}

 

3.4简单直接选择排序

int[] arr = {1, 3, 654, 23, 31, 6, 7, 45, 13, 1};



for (int i = 0; i < arr.length - 1; i++) {
  int mixIndex = i;
  for (int j = i+1; j < arr.length; j++) {
      if(arr[mixIndex] > arr[j]){
          mixIndex = j;
      }
  }
  if(mixIndex != i){
      int temp = arr[mixIndex];
      arr[mixIndex] = arr[i];
      arr[i] = temp;
  }
}

for (int i = 0; i <arr.length; i++) {
  System.out.print(arr[i] + " ");
}

3.5 二分查找

int[] arr = {1, 32, 5, 7, 1, 5, 543, 7, 314, 84, 54};

//前提是数组有序
for (int i = 0; i < arr.length - 1; i++) {
  for (int j = 0; j < arr.length - 1 - i; j++) {
      if (arr[j] > arr[j+1]){
          int 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] + " ");
}

//需要查找的元素
int num = 884;
int value = -1;
//标记符
int head = 0;
int end = arr.length - 1;

while (head <= end){
  int mid = (head + end)/2;

  if(arr[mid] > num){
      end = mid - 1;
  }
  if(arr[mid] < num){
      head = mid + 1;
  }
  if(arr[mid] == num){
      value = mid;
      break;
  }

}

if(value != -1){
  System.out.println("存在,位置在:" + value);
}else {
  System.out.println("不存在");
}
posted @   鸽子gkd  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示