Java二分查找+冒泡排序
二分查找在编程中是用来查找目标元素在有序数组中的位置,并返回目标元素的索引
先给定一个有序数组,在创建一个方法来进行二分
主要思想是:根据数组具有下标的特点来分别计算,最左边的索引,以及最右边的索引,在判断目标元素与中间元素的大小,如果目标元素小于中间元素,我们可以判断出,目标元素在中间元素的左边,我们此时更新左右索引,在计算出新的中间元素,在次进行判断,如果目标元素不在数组中就会出现left>right的情况,退出循环,并返回-1.
public class Test_11_22 {public static void main(String[] args) {//二分查找//创建一个有序数组int [] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};//查找元素int index = binarySearch(arr, 19);System.out.println(index);}public static int binarySearch(int[] arr, int key) {//左边的索引int left = 0;//右边的索引int right = arr.length-1;while(left <= right){//计算中间索引int mid = (left + right)/2;if(arr[mid]<key){//如果key大于中间元素,则搜索右半部分left = mid+1;}else if(arr[mid]>key){//如果key小于中间元素,则搜索左半部分right = mid-1;}else{//如果找到了,则返回索引return mid;}}//如果没有找到,则返回-1return -1;}
}
2.冒泡排序(这里以升序为例讲解)
冒泡排序是把一个无序的数组按照 升序 或者降序 来进行排序 主要的思想是"双指针",通过比较前后元素的大小,如果满足判断条件就会交换元素的位置,第一次排序就会把最大的元素放在最后面,通过这样的方法在进行判断,一直到完成为止,
import java.util.Arrays;public class Test_11_22_2 {public static void main(String[] args) {int[] arr = {5, 3, 8, 6, 2, 7, 1, 9, 4};//调用bubbleSort方法bubbleSort(arr);System.out.println(Arrays.toString(arr));}//冒泡排序public static void bubbleSort(int[] arr) {//在这个方法对数组的变动会影响到原数组,所以不需要返回值,在结果上直接打印就行了//在这里的循环次数是arr.length-1,因为最后一次冒泡排序是不需要的//因为每一次冒泡排序都会将最大的元素放到最后,所以不需要再进行一次冒泡排序for(int i = 0;i<arr.length;i++){for(int j = 0;j<arr.length-i-1;j++){if(arr[j]>arr[j+1]){//满足条件就交换前后两个元素的位置int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
}