其他分享
首页 > 其他分享> > 选择排序,二分查找,Arrays类的简单使用,二维数组

选择排序,二分查找,Arrays类的简单使用,二维数组

作者:互联网

5.8、选择排序

规则

从数组的第一个元素开始,依次和数组后面的元素进行比较,如果满足条件,交换元素。

案例

//选择排序
int[] arr = {133,242,189,153,190};
for (int i = 0; i < arr.length - 1; i++){
    for (int j = i+1; j < arr.length; j++){
        if (arr[i] > arr[j]){
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
}
System.out.println(Arrays.toString(arr));

示意图

image

5.9、二分查找

规则

前提条件:先对数组进行升序排列。

然后从中间值比较,根据偏大偏小,再与该中间值前面或后面部分中间值比较,直到找出所查找的数字

案例

//二分查找
    //二分,二分,二分......
    int[] btw = {94,13,78,24,34,45,17,46,75}; //初始数组
    Arrays.sort(btw); //对数组升序排序
    System.out.println(Arrays.toString(btw)); //打印排序后的数组
    //定义要找的值,比较的部分的首数字的下标,末数字的下标,所找数字的下标标记
    int findNum = 45,start = 0,end = btw.length - 1,findIndex = -1;
    while (btw[start] <= btw[end]){ //不确定循环次数,用 for 循环
        int b = (start + end) / 2; //比较部分的中间值的下标
        if (findNum == btw[b]){
            findIndex = b; //找到所找数字,则跳出循环
            break;
        } else if (findNum < btw[b]) {
            //所找数字比中间值小,则所找数字在此中间值前,比较的部分末位值的下标变为原中间值下标-1
            end = b - 1;
        } else {
            //所找数字比中间值大,则所找数字在此中间值后,比较的部分初位值的下标变为原中间值下标+1
            start = b + 1;
        }
    }


    //判断有无要找的数字,有则打印,无则提示您要找的数不存在
    if (findIndex == -1){
        System.out.println("您要找的数不存在!");
    }else {
        System.out.println(findIndex);
    }
}

示意图

image

5.10、Arrays类的使用

  1. 进行数组排序 :Arrays.sort() : 对数组元素进行升序排序。

  2. 打印输出数组:Arrays.toString() : 把数组的元素循环遍历输出成字符串的形式

  3. 寻找数组中的值:binarySearch(数组名,key) : 根据key,找到数组中对应的下标位置,如果没找到,返回 < 0 的数。

key: 要搜索的值

  1. 数组的复制:Arrays.copyOf(需要复制数组,新数组的长度) ,返回一个新数组,长度是新数组的长度。

  2. 复制数组部分元素:copyOfRange(需要复制的数组,开始索引,结束索引):注意:包含开始索引,不包含结束索引

int[] arr = {47,89,56,34,98,23};
// Arrays.toString() 打印数组元素的方法
System.out.println(Arrays.toString(arr));
// Arrays.sort() 数组升序排列的方法
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

int[] nums = {12,56,234,78,54,27,96};
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
//寻找数字
//Arrays.binarySearch(数组名,寻找的数字)
int index = Arrays.binarySearch(nums,48);
System.out.println("index=" + index);

//数组扩容,复制原数组拥有的值,开辟新数组并定义长度
//Arrays.copyOf(原数组名,新数组长度)
int[] newNums = Arrays.copyOf(nums,10);
System.out.println(Arrays.toString(newNums));

//复制数组部分元素
//Arrays.copyOfRange(原数组名,开始索引,结束索引)
int[] newNums1 = Arrays.copyOfRange(nums,2,6);
System.out.println(Arrays.toString(newNums1));

5.11二维数组

1)定义

数组中再放数组

2)语法

1)动态初始化
数据类型[][] 数组名 = new int[外层数组长度][内层数组长度];
数据类型[][] 数组名 = new int[外层数组长度][];
2)静态初始化
数据类型[][] 数组名 = new int[][]{{1,2},{1,2,3},{1,2,3,4}};
数据类型[][] 数组名 = {{1,2},{1,2,3},{1,2,3,4}};

3)示意图

image

4)案例

//使用数组保存一个学校三个班级,每个班级3个学生的成绩
//1、分别给每个班级排序升序
//2、求每个班级的平均分
Scanner input = new Scanner(System.in);
double[][] scores = new double[3][3]; //动态化初始数组

for (int i = 0; i < scores.length; i++) { //循环每个班级
    //每次求完要清零所以放在外层循环中
    double avg,sum = 0; //每个班级的总分为 sum ,平均分为avg
    for (int j = 0; j < scores[i].length; j++) { //循环每个班级的成绩
        System.out.print("请输入第" + (i+1) + "个班级的第" + (j+1) + "个学生的成绩:");
        scores[i][j] = input.nextDouble(); //输入 i 班第 j 个人的成绩
        sum += scores[i][j]; //求 i 班成绩的总和
    }
    avg = sum / scores[i].length; //求 i 班成绩的平均分
    Arrays.sort(scores[i]); //对 i 班成绩排序
    System.out.print(i + "班的成绩单为:" + Arrays.toString(scores[i])); //打印 i 班成绩
    System.out.println("\n" + i + "班的平均分为:" +String.format("%.2f",avg) + "\n"); //打印 i 班平均分
}

标签:二分,arr,Arrays,System,int,查找,数组,out
来源: https://www.cnblogs.com/hwphwc/p/16476527.html