美文网首页
冒泡排序Java实现

冒泡排序Java实现

作者: 爱学习的代代 | 来源:发表于2022-04-03 22:14 被阅读0次

    一、基本思想: 相邻的数据进行比较,较大的数据下沉,较小的数据冒起来。

    二、实现(将数组中的元素从小到达排序):

    1. 从数组的第一个元素开始,进行两个数据的比较,如果该数据,比后一个数据大则交换,一轮结束后,最大的元素会被放置到数组的末尾。

    2. 不断地重复步骤1,直到所有的数据排序完成。

    Java代码实现:

    import java.util.Arrays;
    
    public class bubble_sort {
    
        public static void main(String[] args) {
    
            int[] arr = new int[]{8,5,9,3,6,4,10,2,7};
    
            System.out.println(Arrays.toString(bullbleSort(arr)));
        }
    
        public static void swap(int[] nums, int m, int n) {
    
            if(m == n) {
                return;
            }
    
            int tmp = nums[m];
            nums[m] = nums[n];
            nums[n] = tmp;
    
        }
    
    
        public static int[] bullbleSort(int[] nums) {
    
            if (nums.length == 0 ){
                System.out.println("数组为空,无需排序");
            }
    
            if(nums.length == 1) {
                System.out.println("数组仅有一个元素,无需排序");
            }
    
            for(int i = 0; i < nums.length; i++) {
                for(int j = 0; j < nums.length; j++) {
                    if(nums[j] > nums[j + 1]) {
                        swap(nums, j, j+1);
                    }
    
                }
            }
    
            return nums;
    
        }
    
    }
    

    说明:

    这样写执行会报错,因为循环进行比较的时候,j的值最大只能到倒数第二个值(7),上述代码中j的范围是(0~8),j+1会导致数据越界

    除此之外,每一轮循环会确定一个该轮最大的值,放在数组的后部, 每轮找到该轮最大的值,后续该最大值就无需再参与比较,所以据此可以更近一步缩小j的范围,推导过程如下:

    第一轮: i = 0; j最大为7(9-1-1)
    第二轮: i = 1;j最大为6(9-1-2)
    第三轮: i = 2;j最大为5(9-1-3)
    ...
    第N轮: i = n-1; j最大为9-1-n即: num.length-1-n

    所以最终的代码为:

    import java.util.Arrays;
    
    public class bubble_sort {
    
        public static void main(String[] args) {
    
            int[] arr = new int[]{8,5,9,3,6,4,10,2,7};
    
            System.out.println(Arrays.toString(bullbleSort(arr)));
        }
    
        public static void swap(int[] nums, int m, int n) {
    
            if(m == n) {
                return;
            }
    
            int tmp = nums[m];
            nums[m] = nums[n];
            nums[n] = tmp;
    
        }
    
    
        public static int[] bullbleSort(int[] nums) {
    
            if (nums.length == 0 ){
                System.out.println("数组为空,无需排序");
            }
    
            if(nums.length == 1) {
                System.out.println("数组仅有一个元素,无需排序");
            }
    
            for(int i = 0; i < nums.length; i++) {
                for(int j = 0; j < nums.length-1 -i; j++) {
                    if(nums[j] > nums[j + 1]) {
                        swap(nums, j, j+1);
                    }
    
                }
            }
    
            return nums;
    
        }
    
    }
    
    

    运行结果:

    冒泡排序.png

    相关文章

      网友评论

          本文标题:冒泡排序Java实现

          本文链接:https://www.haomeiwen.com/subject/vhkqsrtx.html