700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Java基础语法——选择排序 冒泡排序以及二分查找法和Arrays类的使用

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

时间:2022-12-18 22:03:04

相关推荐

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

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

文章目录

一、选择排序二、冒泡排序三、二分查找法四、Arrays类(对数组的操作)1.对数组进行升序排序2.判断两个数组是否相等3.将数组转换成字符串4.把数组中的所有元素都替换成一个值总结

一、选择排序

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

将数组中的元素按降序排列实现代码如下:

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类快速实现对数组的一些操作,希望对各位有所帮助

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。