JavaSE基础语法3-数组

1.数组

1.数组的基本概念及作用

数组的基本概念及作用
数组是相同数据类型元素的集合
数组本身是引用数据类型,即对象。但是数组可以存储基本数据类型,也可以存储引用数据类型。

数组,是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。

2.数组的创建

1.声明

int[] ary0 = new int[10];
int[] ary1 = new int[]{1, 2, 3, 4, 5};
int[] ary2 = {1, 2, 3, 4, 5};

注:数组创建以后长度无法改变

2.数组类型

1.动态创建数组

没有为元素赋值,可以结合for循环进行赋值

2.静态创建数组

在创建的时候,即为每个元素赋初值

注:length属性可以获取数组长度

3.数组元素的访问

数组名字[下标] 例如:a[0],a[1]

注:数组的下标从0开始。例如:int []a=new int [10];//创建一个可以存放10个整形元素的数组。它的元素位置为:a[0],a[1],a[2],a[3],…a[9]。

1.利用for循环访问。

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

2.增强for循环

int []a=new int[10];
for(int temp:a)
{
	System.out.println(x);
}

2.排序

1.冒泡排序

冒泡排序重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

  1. 冒泡排序的特点

    总趟数是数组的长度减一。

    每比较一趟,下一趟就少比较一次。

  2. 代码实现

/*
* 冒泡排序
* 大的下沉,小的冒起来
* 比较趟数比数组的长度减一
* 每比完一次,就少比较一次
* */
public class BubbleSort {
    public static void sort(int [] a){
        for (int i = 0; i < a.length-1; i++) {// 趟数
            for (int j = 0; j <a.length-i-1; j++) {// a.lenrth-i-1 ,意为每比较一趟之后少比较一个,
                                                    // 并且第一次比较的次数就比数组长度小一
                int temp;// 临时变量 ,暂时存储元素。
                if(a[j]>a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
    }
    public static void main(String[] args) {
        int [] a = {54,123,23,113,5,35,1};
        // 54,23,113,5,35,1,123
        // 23,54,5,35,1,113,123
        // 23,5,35,1,54,113,123
        // 5,23,1,35,54,113,123
        // 5,1,23,35,54,113,123
        // 1,5,23,35,54,113,123
        BubbleSort.sort(a);// 引用类型传递
        System.out.println(Arrays.toString(a));//这里输出的a和Array指向的是同一个引用,
                                                // 所以方法中的内容改变会影响到外面的对象引用
    }
}

2.选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

  1. 原理:用一个元素与后面所有的元素比较,若最小则不变,若不是,则交换位置,之后继续用"新"的最小的与后面尚未比较的一一比较,比完之后,这是一次比较的完成。找出最大的同理。

  2. 两种方式

    第一种:每当在剩余元素中找到更小(大)的元素时,直接交换然后继续比较。

    第二种:在剩余元素中找到更小(大)的元素时,先记录下来,然后用记录下来的元素继续与后面的元素相比较。

  3. 代码实现

    第一种方式:

    /*
    * 选择排序
    * */
    public class SelectSort {
        public static void sort(int [] a){
            //找到就交换
            for (int i = 0; i < a.length-1; i++) {// 趟数还是数组长度减一
                for (int j = i+1; j < a.length; j++) {// 这里只需要第一个和后面的每一个排序,
                    // 所以j=i+1,j<a.length,意为后面的每一个都遍历到了
                    if(a[i]>a[j]){// 这样是每次符合条件,都需要交换一次
                        int temp = a[i];
                        a[i] = a[j];
                        a[j] = temp;
                    }
                }
            }
        }
        public static void main(String[] args) {
            int [] a = {7,5,9,1,3};
            // 1,7,9,5,3
            // 1,3,9,7,5
            // 1,3,5,9,7
            // 1,3,5,7,9
            SelectSort.sort(a);
            System.out.println(Arrays.toString(a));
        }
    }
    

    第二种方式:

    /*
    * 选择排序
    * */
    public class SelectSort {
        public static void sort1(int [] a){
            // 找到后记录再交换
            int minindex;// 加了一个变量,可以记录目前最小的元素的下标
            for (int i = 0; i < a.length-1; i++) {// 趟数比数组长度少一
                minindex = i;
                for (int j = i+1; j <a.length ; j++) {
                    if(a[minindex]>a[j]){
                        minindex = j;
                    }
                }
                // 在内层循环找出最小的元素的下标之后,再在外层循环里面进行一次交换。
                int temp1 = a[i];
                a[i] = a[minindex];
                a[minindex] = temp1;
            }
        }
        public static void main(String[] args) {
            int [] a = {7,5,9,1,3};
            // 1,7,9,5,3
            // 1,3,9,7,5
            // 1,3,5,9,7
            // 1,3,5,7,9;
            SelectSort.sort1(a);
            System.out.println(Arrays.toString(a));
        }
    }
    

3.插入排序

插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

插入排序就像我们玩扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的。

  1. 原理:假定前面都是排好序的,现在要往其中插入一个数,但是为了保持之后仍是排好序的。因此,这个要插入的数需要与前面的每一个比较,直到找到自己的位置。反复执行,直到找到全部排好。

注:需要注意保存需要插入的元素的值,和已经排好序的紧挨的元素的下标,因为这个下标是后面用来判断下标合法范围的

  1. 代码实现:

    /*
    * 插入排序
    * */
    public class InsertSort {
        public static void sort(int [] a){
            for (int i=0; i < a.length-1; i++) { /* 这里只需要走过一遍数组就可以完成排序。
                                                    所以这里的 a.length-1 约束的是下标,而非趟数。*/
                int current = a[i+1];/* 使用current变量存储a[i+1]的值,这里只能存储值,如果存储下标的话,
                                         在for循环中会改变当前下标的值,导致值丢失。*/
                int perindex = i; /* 使用perindex变量存储啊a[i]的下标 i ,这里不存储值是为了,
                                         后面判断索引合法范围的时候需要使用。*/
                while(perindex>=0 && a[perindex]>current){/* 假设目前用3进行比较,3的值被存储在current中,是隐式的,
                                                             但是是一直在用3和前面的比较,直到找到位置。*/
                    a[perindex+1] = a[perindex];// 用两者中的前一个将后面的覆盖
                    perindex--;// 光标前移,继续比较
                }
                a[perindex+1] = current;// 这里的加一是因为上面的for循环多减了一个一,因此需要加一,返回到正确的位置。
            }
        }
        
        // 这个是使用for循环来实现的
        public static void sort1(int [] a){
            for (int i = 0; i < a.length-1; i++) {
                int current1 =a[i];
                int j=i-1;
                for ( ; j>0 && a[j]>a[i]; j--) {
                    a[i] = a[j];
                }
               a[j+1] =current1;
            }
        }
        public static void main(String[] args) {
            int [] a = {2,4,1,3,7,0};
                        // 2,4,1
                        // 2,4,4
                        // 2,2,4
                        // 1,2,4,3,7
                        // 1,2,4,4(3),7
                        // 1,2,3,4,7
            InsertSort.sort(a);
            System.out.println(Arrays.toString(a));
    
            InsertSort.sort1(a);
            System.out.println(Arrays.toString(a));
        }
    }
    

3.二维数组

1.二维数组的定义

二维数组的中的元素都是数组。

2.二维数组的声明

  1. int [][]a;(建议使用)
  2. int a2[][];

3.二维数组的创建

int [][]a = new int[][]{{1,2,3},{1,2,3},{1,2,3}};
int [] [] b = {{1,2,3},{1,2,3},{1,2,3}};
int [][] c = new int[3][5];

  1. 二维数组的迭代:
public class TwoDimensionalArray {
    public static void main(String[] args) {
        int [][]a=new int[][]{{1,2},{3,4}};
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j]);
            }
        }
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值