冒泡排序Java实现

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

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

  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实现)