java中数组的使用

数组:

目录

数组:

数组的定义:

一维数组:

二维数组:

数组中的算法:

冒泡排序:

选择排序:

​编辑 

插入排序:

二分查找:

算法的特性:

数组的定义:

一维数组:

数组是一种连续的存储空间并且大小固定的线性表,用来存储多个相同数据类型的容器;

(容器一般是一种数据结构,用来解决多个数据保存和计算的容器)

数组的特点:

  1. 大小固定

  2. 连续的存储空间

  3. 存储的数据类型固定

  4. 数组是保存在堆内存中,数组的本质是对象!

//第一种
数据类型  [] 变量名称  =  new  数据类型 [size];
//第二种
数据类型  [] 变量名称  =  new  数据类型 []{值1,值2……};
//第三种
数据类型  [] 变量名称  =  {值1,值2……};

数组对象.length 属性 (获取元素的个数)

通过下标来访问元素:编程中下标都是(99%)从零开始!!

数组对象【下标】:通过下标来访问元素的值

修改元素的数值: 数组对象 【下标】 = 新值

遍历数组:制造索引

foreach:循环加强 for( 数据类型 临时变量 : 可迭代对象){ 输出临时变量}

public static void main(String[] args) {
		// TODO 数组的使用练习
		int arr [] = new int [10];
		int arr1 [] = new int [] {1,2,3,4,5,6,7,8,9};
		System.out.println("数组的长度为:" + arr.length);
		System.out.println("数组下标为八的值为:" + arr1[8]);
		//修改数组对应的下标的值
		arr1[8] = 100;
		//增强for循环来遍历元素
		for (int i : arr1) {
			System.out.print(i + " ");
		}



/*
数组的长度为:10
数组下标为八的值为:9
1 2 3 4 5 6 7 8 100 
*/

二维数组:

数据类型 数组名称 【】【】 = new 数据类型 【行】【列】;

简单的方式定义: 数据类型 数组名称【】【】 = { {1, 1, 1,} ,{2, 2, 2}}

package com.lele.day7_18;


public class Zuo01 {

	public static void main(String[] args) {
		// TODO 数组的使用练习
		int arr [][] = new int [3][2];
		System.out.println("数组的行为:" + arr.length);
		System.out.println("数组的列为:" + arr[0].length);
		print(arr);
		int arr1 [][] = {
				{1, 2, 3},
				{4, 5, 6},
				{7, 8, 9}
		};
		print(arr1);
		arr1[2][2] = 100;
		print(arr1);
	}
	public static void print(int arr [][]) {
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[0].length; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}
}


/*
数组的行为:3
数组的列为:2
0 0 
0 0 
0 0 
1 2 3 
4 5 6 
7 8 9 
1 2 3 
4 5 6 
7 8 100 
*/

数组中的算法:

数据结构与算法中算法(排序和查找的算法)

排序:将无序的数据按照特定的规则排成有序的数据(升序,降序)

冒泡排序:

冒泡排序算法的原理如下:(大数上浮法:每一次找一个最大值)
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

package Test;
​
import java.util.Scanner;
​
public class Day07 {
    public static void main(String[] args) {
        int arr[] = {1,5,9,56,12,45,100,-1};
        Sort(arr);
    }
​
    public static void Sort(int arr []){
        //总共的次数
        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]){
                    //第一种
//                    arr[j] = arr[j] ^ arr[j + 1];
//                    arr[j + 1] = arr[j] ^ arr[j + 1];
//                    arr[j] = arr[j] ^ arr[j + 1];
                    //第二种
                    int temp = arr[j+1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                    //第三种
//                    arr[j] = arr[j] + arr[j + 1];
//                    arr[j + 1] = arr[j] -arr[ j +1] ;
//                    arr[j] = arr[j] - arr[ j +1] ;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}
​

选择排序:

默认第一个值为最小值,依次做判断,直到找到真正的最小值,交换这两个数字

package com.lele.day7_18;


public class Zuo01 {

	public static void main(String[] args) {
		// TODO 数组的使用练习
		int arr [] = {4, 5, 6, 9, 8, 7, 2, 1, 3};
		selectSort(arr);
		for (int i : arr) {
			System.out.print(i + " ");
		}
	}
	public static void selectSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[j] < arr[i]) {
					swap(arr, j, i);
				}
			}
		}
	}
	
	private static void swap(int[] arr, int i, int j) {
		arr[j] = arr[j] ^ arr[i];   
		arr[i] = arr[j] ^ arr[i]; 
		arr[j] = arr[j] ^ arr[i];  
	}
}

 

插入排序:

插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序

默认第一个数是有序的,把之后的元素依次插入到这个有序数组中,插入式必须保证数组一直有序

package com.lele.day7_18;


public class Zuo01 {

	public static void main(String[] args) {
		// TODO 数组的使用练习
		int arr [] = {4, 5, 6, 9, 8, 7, 2, 1, 3};
		insertSort(arr);
		for (int i : arr) {
			System.out.print(i + " ");
		}
	}
	
	public static void insertSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = i + 1; j > 0; j--) {
				if (arr[j] < arr[j - 1]) {
					swap(arr, j, j - 1);
				}
			}
		}
	}
	
	
	private static void swap(int[] arr, int i, int j) {
		arr[j] = arr[j] ^ arr[i];   
		arr[i] = arr[j] ^ arr[i]; 
		arr[j] = arr[j] ^ arr[i];  
	}
}

二分查找:

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

特点:针有序的序列,可以直接查找中间值,大于中间值则在后半部分,反之则在前面

public static int ECha01(int[] arr, int key) {
        int start = 0,end = arr.length -1;
        while (start <= end){
            int mind = (start + end) / 2;
            if (arr[mind] > key){
                end = mind - 1;
            }else if (arr[mind] < key){
                start = mind + 1;
            }
            else {
                return mind;
            }
        }
        return -1;
    }
// 二分查找,递归完成
	public static int binarySearch(int[] arr, int target, int start, int end) {
		if (start > end) {
			return -1;
		}

		int middle = (start + end) / 2;
		if (target == arr[middle]) {
			return middle;
		} else if (target > arr[middle]) {
			return binarySearch02(arr, target, middle + 1, end);
		} else {
			return binarySearch02(arr, target, start, middle - 1);
		} 
	}

算法的特性:

  • 算法的时间复杂度 (冒泡:O(n ^ 2) 选择:O(n^2) )

  • 算法的空间复杂度 (与时间成反比)

  • 算法的稳定性 (看某个数字的相对位置)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值