Java:简单算法:冒泡排序、选择排序、二分查找

冒泡排序

Java:简单算法:冒泡排序、选择排序、二分查找_第1张图片

// 1、准备一个数组
int[] arr = {5231};

//2、定义一个循环控制排几轮
for (int i = 0; i < arr.length - 1; i++) {
// i = 0 1 2        【5,2,3,1】      次数
// i = 0 第一轮       0  1  2            3
// i = 1 第二轮       1  2               2
// i = 2 第三轮       0                  1

//3、定义一个循环控制每轮比较几次。
for (int j = 0; i < arr.length-i-1; j++) {
//判断当前位置的元素值,是否大于后一个位置处的元素值,如果大则交换。
if(arr[j] > arr[j+1]){
int temp = arr[i+1];
arr[j+1] = arr[i];
arr[j] = temp;
		}
	}
}
system.out.println(Arrays.toString(arr));


选择排序

// 1、准备一个数组
int[] arr = {5231};

//2、定义一个循环控制排几轮
for (int i = 0; i < arr.length - 1; i++) {
// i = 0 1 2        【5,2,3,1】      
//                    0 1  2  3
// i = 0 第一轮     j=   1  2  3          
// i = 1 第二轮     j=      2  3               
// i = 2 第三轮     j=         3                  

//3、定义一个循环控制每轮比较几次。
for (int j = i + 1; i < 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));

简化代码,适用于当数组非常大时提高性能

// 1、准备好一个数组
int[] arr = {5132};/ /

//2、控制选择几轮
for (int i = 0; i < arr.length - 1; i++) {
     int minIndex = i;
     
//3、控制每轮选择几次。
for (int j = i + 1; j < arr.length; j++) {
//判断当前位置是否大于后面位置处的元素值,若大于则交换。
if(arr[minIndex] > arr[i]){
minIndex = j;
	}
}
//决定是否交换。
if(i != minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
	}
}
system.out.println(Arrays.toString(arr));


二分查找

  public static void main(String[] args) {
        //1.准备好一个数组,首先这个数组必须是排好顺序的
        int[] arr = {7,23,79,81,103,127,131,147};

        //接下来将二分法定义成一个方法,调用这个方法
        System.out.println(binarySearch(arr, 81));//返回 3 
        System.out.println(binarySearch(arr, 166));//返回 -1
    }

    public static int binarySearch(int[] arr, int data){
        //1.定义两个变量,一个站在左边位置,一个站在右边位置。
        int left = 0;
        int right = arr.length-1;

        //2.定义一个循环 控制折半
        while (left <= right){
            //3.每次折半都算出中间位置的索引
            int middle = (left + right)/2;
            //4.判断当前要找的元素值,与中间位置处的元素值的大小情况
            if (data < arr[middle]) {
                //往左边找,截止位置(右边位置) = 中间位置 - 1;
                right = middle -1;
            }else if (data >arr[middle]){
                //往右边找,截止位置(左边位置) = 中间位置 + 1;
                left = middle +1;
            }else {
                return middle;//刚好中间位置就是需要的元素
            }
        }
        return -1;//代表数组中没有要找的元素。
    }

你可能感兴趣的:(算法,java,排序算法,idea)