Java基础语法——选择排序、冒泡排序以及二分查找法和Arrays类的使用

本文将带你了解选择排序、冒泡排序以及二分查找法的原理和代码实现,以及通过Arrays类快速实现对数组的一些操作


一、选择排序

  选择排序是从第一个数开始,依次与所有的数相比较,把最大(降序)/最小(升序)的数放到第一个位置上,然后再将第二个数与除第一个数以外的数相比较,把最大(降序)/最小(升序)的数放到第二个位置上,依次类推一直到倒数第二个数结束为止,理解来说就是跟体育课老师按照身高的大小排队列一样,总是把最高的或者最矮的放在最前面
将数组中的元素按降序排列实现代码如下:

int [] arr = {3,5,56,73,43,108,89,7,27};
for(int i = 0 ;i < arr.length - 1; i++){
	for(int j = i ;j < arr.length; j++){
		if(arr[i] < arr[j]){
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
}
System.out.println(Arrays.toString(arr));
//输出结果为[108, 89, 73, 56, 43, 27, 7, 5, 3];

需要的注意问题
  1.外层循环控制的是比较的次数,同时变量的初始化也控制了从哪一个数字开始比较,我们是从第一个数字开始,也就是下标为0的数字开始,比较元素个数 - 1次即可,假设我们要比较3个数的大小,那么我们只需要比较前两个数字,就可以知道第三个数字的大小,所以外层循环的控制条件是arr.length - 1
  2.内层循环控制的是从要比较的数字与其余所有数字的具体比较实现,因为比较过得数字没有必要在进行比较,所以我们只需要从外部循环给定的需要比较的数字开始比较即可
  3.升序和降序由内部循环的比较进行决定,如果大于交换则是想要小的值,就是升序,如果小于交换就是想要大的值,就是降序

二、冒泡排序

  冒泡排序是从第一个数开始依次往后两两相比,将最大(降序)/最小(升序)的数一直保留带到最后,相当于保镖保护着大哥一路往后走,只有最大或者最小的数才能一路才能走到最后,其他数都要给他让路(交换),下面让我们用代码来具体了解一下
将数组中的元素按降序排列实现代码如下:

int [] arr = {3,5,56,73,43,108,89,7,27};
for(int i = 0 ;i < arr.length - 1;i++){
	for(int j = 0 ;j < arr.length - 1 - i ;j++){
		if(arr[j] < arr[j + 1]){
			int temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}
System.out.println(Arrays.toString(arr));
//输出结果为[108, 89, 73, 56, 43, 27, 7, 5, 3];

需要的注意问题
  1.外层循环控制的是比较的次数,从下标为0的数开始依次与后面的数两两相比,假如有3个数,那么只需要比较两次即可知道这三个数的顺序
  2.内层循环控制的是比较的具体实现,因为每次都是把符合条件的数放到最后,所以每次都是从下标为0的数开始依次与后面的数两两相比,因为后面的数字已经排好了位置,所以没必要在比较,排好了几个数是由i来决定的,所以这里可以减去i来提高运行效率

三、二分查找法

  大家都知道一张普通的A4纸最多对折7次,吉尼斯世界纪录所用的巨大的卫生纸经过对折后也才最多13次,二分查找法与此原理相同,就是通过这种思维来快速的找到元素所在的位置,每一次查找就可以排除一半量的数据,在数据量如此众多的时代,这无疑是一种效率非常高的方法
  使用二分查找法的前提是该数组已经按照升序排列,原理是我们设定一个开始(start)、结束(end)和中间(mid)位置的下标,将要查找的数与该数组的中间值相比较,如果比中间值小,就说明在start和mid之间,则mid就成为了end,如果比中间值大,则mid就成为了start,并赋予新的中间值,然后再进行比较,依次类推,最后找到最终值
写一个方法,返回指定数组下的指定数据的下标值,如果不存在则返回-1,实现代码如下(示例):

public static int findData(int[] arr, int find){
	int start = 0;
	int end = arr.length - 1;
	int findIndex = -1;
	while(start <= end){
		int mid = (start + end) / 2;
		if(find == arr[mid]){
			findIndex = mid;
			break;
		}else if(find < arr[mid]){
			end = mid - 1;
		}else if(find > arr[mid]){
			start = mid + 1;
		}
	}
	return findIndex;
}

假设我们要找数组中是否有数据为143实现过程如图所示:
二分查找法查找过程

四、Arrays类(对数组的操作)

  Java中提供了Arrays类专门对数组对象进行操作,包括排序,判断是否相等,替换值等操作

1.对数组进行升序排序

  Arrays.sort()方法
  实现代码如下(示例):

int [] arr = {3,5,56,73,43,108,89,7,27};
System.out.println("**********排序前***********");
for (int i : arr) {
	System.out.println(i + " ");
}
System.out.println("**********排序后***********");
Arrays.sort(a);
for (int i : a) {
	System.out.println(i);
}

需要的注意问题
  该方法只能进行升序排序

2.判断两个数组是否相等

  Arrays.equals()方法
  实现代码如下(示例):

String [] str1 = null;
String [] str2 = null;
System.out.println(Arrays.equals(str1,str2));
int[] array1 = {3};
int[] array2 = {4};
System.out.println(Arrays.equals(array1,array2));
//输出结果为true false

需要的注意问题
  只有两个数组的数据类型及数据都相同是才返回true

3.将数组转换成字符串

  Arrays.toString()方法
  实现代码如下(示例):

String [] a = {"1","2","3"};
System.out.println(Arrays.toString(a));
//输出结果为[1, 2, 3]

需要的注意问题
  返回的是用中括号括起来,每个元素之间用逗号分隔

4.把数组中的所有元素都替换成一个值

  Arrays.fill()方法
  实现代码如下(示例):

String [] a = {"1","2","3"};
Arrays.fill(a,"哈哈,被替换了");
System.out.println(Arrays.toString(a));
//输出结果为[哈哈,被替换了, 哈哈,被替换了, 哈哈,被替换了]

需要的注意问题
  替换之前的数据类型要和替换之后的数据类型保持一致

总结

  本文讲解了选择排序、冒泡排序以及二分查找法的原理和代码实现,以及通过Arrays类快速实现对数组的一些操作,希望对各位有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan生的小小白

感谢您未来我将提供更精彩的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值