【Java SE】实现冒泡排序和数组逆序

🐳冒泡排序:

给定一个数组, 让数组升序 (降序) 排序.

算法思路: 假设排升序: 1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾 2. 依次从上上述过程,直到数组中所有的元素都排列好

动图如下:

代码实现:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void bubbleSort(int[]arr){
        boolean flag=false;
        //比较的轮数
        for (int i = 0; i < arr.length-1 ; 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;
                        flag=true;
                    }
            }
                    if(flag==false){
                    break;
                   }

        }


    }
}

如果进一步优化便是当有序的时候直接跳出循环

关键在于如何理解冒泡排序,特别是每轮比较的次数是算法的关键。

🐳Java内置数组排序算法:

由于冒泡排序性能较低. Java 中内置了更高效的排序算法

Arrays.sort(arr);

记得加该工具的包名。

代码实现:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

  
}

🐳数组逆序:

给定一个数组, 将里面的元素逆序排列

算法思路:

设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素。 然后让前一个下标自增, 后一个下标自减, 循环继续即可。

代码实现:

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        System.out.println("逆序前:");
        System.out.println(Arrays.toString(arr));
        reverse(arr);
        System.out.println("逆序后:");
        System.out.println(Arrays.toString(arr));
    }
    public static void reverse(int[]arr){

        int left=0;//最左边下标(左指针)
        int right= arr.length-1;//最右边下标(右指针)
        //开始交换
        while(left<right){//满足左指针在右指针的左侧参与循环

            int temp=arr[left];
            arr[left]=arr[right];
            arr[right]=temp;
            right--;
            left++;
        }
    }


}
经验分享 程序员 微信小程序 职场和发展