数组的应用:Arrays类,冒泡排序,稀疏数组

数组的应用

Arrays类

其他工具可查看JDK帮助文档

package Array;

import java.util.Arrays;

public class Demon7 {
    public static void main(String[] args) {
        int[] a = {2,87,458,21,54,87,12,9};
        System.out.println(a); //[I@14ae5a5
        System.out.println(Arrays.toString(a));  //Arrays方法提供的,把数组变为String类型
                                                 //结果为[2, 87, 458, 21, 54, 87, 12, 9]
        Arrays.sort(a);                          //排序数组 升序

        System.out.println(Arrays.toString(a));  //[2, 9, 12, 21, 54, 87, 87, 458]
    }
}

冒泡排序

是一种最出名的排序算法。

  1. 比较数组中,相邻的两个元素,如果第一个比第二个大,则交换他们的位置
  2. 每次比较都会产生一个最大或最小的数字
  3. 下一轮则可以上一次排序
  4. 一次循环,直到结束
package Array;

import java.util.Arrays;

public class Demon8 {
    public static void main(String[] args) {
        int[] a = {7,6,5,4,9,8};

        System.out.println(Arrays.toString(a));
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    //冒泡排序
    public static int[] sort(int[] a){
        int temp = 0;
        for (int i = 0; i < a.length-1; i++) {
            for (int j = 0; j < a.length-1-i; j++) { //这里length-1是因为下面存在j+1,正常遍历的情况下,j<length即可。
                                                     //-i是因为j循环一次之后,就排出一个最大或最小值,故可以减少一次循环 ??
                                                     //可能本次未排出一个,但下次会排除两个,总的来说一次循环排出一个 ??
                                                     //尚不了解比较次数的数学原理,我只知道循环一次,下次循环可少比较一次
                if (a[j]>a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }

            }

        }
        return a;}
}

稀疏数组

在二维数组中,提取少数有效值的,做到压缩数组。

计算有多少个有效值:遍历原数组,如果元素不等于0,则sum数加1,获得稀疏数组的行数。

创建稀疏数组 Array[sum] [3]

确定有效值在原数组中的位置并记录在稀疏数组中:int count = 0;遍历原数组,如果元素不等0,count+1,稀疏数组[count] [0]记录该元素的a,[count] [1]记录该元素的j,[count] [2]记录该元素的值。

posted @ 2020-11-05 18:13  SshadowHeart  阅读(61)  评论(0)    收藏  举报