数组、排序、查找

数组、排序、查找

1. 数组

数组是引用类型

数组基础语法

//定义数组
double[] hens = {3, 5, 1, 3.4, 2, 50};
int a[] = new int[5]; //数组中的元素默认为0
//可以通过数组下标访问数组中的某个元素
//可以通过 数组名.length 得到数组长度  

细节:

1. 数组是**多个相同类型数据**的组合(==注意数据类型==)
2. 数组中的元素可以是任何数据类型,但是**不能混用**
3. 数组创建后,如果没有赋值,有默认值
int 0, short 0, byte 0, long 0, float 0.0, double 0.0, char \u0000, boolean false, String null;
4. 数组的下标必须在指定范围内使用,否则报:下标越界异常,比如 
int arr[] = new int[5]; //指有效下标为0-4;

5. 数组属引用类型,数组型数据是对象

赋值机制

  1. 基本数据类型赋值,赋值方式为值传递(把后面的值往前赋)

int n1 = 10;
int n2 = n1;
//n2的变化,不会影响到n1的值
  1. 数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用赋值(指向地址)

int arr1[] = {1,2,3};
int arr2[] = arr1; //把arr1赋给arr2,或者说让arr2指向arr1,二者地址相同
//arr2[]的变化会影响到arr1[]

数组拷贝

int arr1[] = {10, 20, 30};
//创造一个新的数组arr2[],开辟新的数据空间
//大小 arr1.length
int arr2[] = new int [arr1.length];
//遍历 arr1 ,把每个元素拷贝到arr2[]对应的元素位置
for(int i = 0; i < arr1.length; i++){
   arr2[i] = arr1[i];
}
//此时修改arr2的值不会对arr1有任何影响
arr2[0] = 100;

数组之间也可以赋值!!!

比如 : arr = arr1; //原来我就缺了这一个!!!

2. 排序

(1).内部排序

1.将所有数据加载到内部存储器中进行排序,包括(交换式排序法,选择式排序法,自己合并排序法)

冒泡排序:

 public static void main(String[] args) {
       int temp = 0;
       int arr[] = {24, 69, 80, 57, 13};
       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]){
                   temp = arr[j+1];
                   arr[j+1] = arr[j];
                   arr[j] = temp;
              }
          }
      }
       System.out.println(Arrays.toString(arr));
       //第一轮比较4次,第二轮比较3次,以此类推,降低成本
  }

2.借助外部存储进行排序,包括(合并排序法,直接合并排序法) (大数据)

3. 查找

1.顺序查找SeqSearch.java

//int index = -1;  绝技!!
public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       String a[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
       int index = -1;
       System.out.println("请输入您要查找的名称:");
       String c = scanner.next();
       for (int i = 0; i < a.length; i++) {
           if (c.equals(a[i])){
               System.out.println("恭喜您查找到"+a[i]+"\n下标为"+i);
               index = i;
               break;
          }
      }
       if (index == -1){
           System.out.println("没有查找到"+c);
      }
  }

2.二分查找(算法)

4. 二维数组

静态初始化

int[] a[] = new int[][];//a也是二维数组

判断题:

String strs[] = new String[]{"a","b","c"};//ok  (中括号中不能有值,若是后面的中括号里有值则为错)

思路是先大体思路,再在大体思路上具体细分,然后用代码实践、查错。

(int)(Math.random() * 100) + 1; //随机生成一个1-100之间的整数

5.数组扩容

//扩容加排序
public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       int a1[] = {10, 12, 45, 90};
       int temp = 0;
       char b;
       do {
           //扩容
           System.out.println("请输入要添加的数:");
           int a2[] = new int[a1.length+1];
           for (int i = 0; i < a1.length; i++) {
               a2[i] = a1[i];
          }
           int a = scanner.nextInt();
           a2[a1.length] = a;
           a1 = a2;
           //冒泡排序
           for (int i = 0; i < a1.length - 1; i++) {
               for (int j = 0; j < a1.length-i-1; j++) {
                   if (a1[j] > a1[j+1]){
                       temp = a1[j+1];
                       a1[j+1] = a1[j];
                       a1[j] = temp;
                  }
              }
          }
           //b
           for (int i = 0; i < a1.length; i++) {
               System.out.print(a1[i]+" ");
          }
           System.out.println("是否要继续添加y/n:");
           b = scanner.next().charAt(0);
      }while (b == 'y');
       System.out.println("退出,程序继续。。。");
  }

 

posted @   两生jh  阅读(198)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示