ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-14 10:00:45  阅读:138  来源: 互联网

标签:二分 arr Arrays System int 查找 数组 out


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有