选择排序,二分查找,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));
示意图
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);
}
}
示意图
5.10、Arrays类的使用
-
进行数组排序 :Arrays.sort() : 对数组元素进行升序排序。
-
打印输出数组:Arrays.toString() : 把数组的元素循环遍历输出成字符串的形式
-
寻找数组中的值:binarySearch(数组名,key) : 根据key,找到数组中对应的下标位置,如果没找到,返回 < 0 的数。
key: 要搜索的值
-
数组的复制:Arrays.copyOf(需要复制数组,新数组的长度) ,返回一个新数组,长度是新数组的长度。
-
复制数组部分元素: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)示意图
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