排序算法之冒泡


1.原理

两层循环完成排序

外层循环:
外层循环一次会把最大的数移动到list[n]
循环第二次会把第二大的数移动到list[ln-1]
当循环n-1后,排序完成。

内层循环:
两相邻数字进行比较,如果list[j]比list[j-1]大,则交换数字

因为过程就是不断的较大的数向数组后移动,就像水冒泡一样,因此称之为冒泡排序

2.java源码

import java.util.Random;
/**
 * 
 * <p>
 * Description:冒泡排序
 * <p>
 * 
 * @author gaozhen
 * @date 2018年6月30日
 * @Version 1.0
 */
public class BubleSort {
    public static void main(String[] agrs) {
        final int MAX_SIZE = 10;
        int[] array = new int[MAX_SIZE];
        Random random = new Random();
        for (int i = 0; i < MAX_SIZE; i++) {
            array[i] = random.nextInt(MAX_SIZE);
        }
        System.out.println("排序前:");
        print(array);
        System.out.println("开始排序...");
        array = sort(array);
        System.out.println("排序完成");
        System.out.println("排序后:");
        print(array);
    }
    public static int[] sort(int[] nums) {
        for (int i = 0; i < nums.length - 1; i++) {
            /**
             * 每做完一次循环,第nums.length-i大移到合适的位置
             */
            for (int j = 0; j < nums.length - 1 - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    int temp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = temp;
                }
            }
            print(nums);
        }
        return nums;
    }
    public static void print(int[] nums) {
        for (int i : nums) {
            System.out.print(i + "\t");
        }
        System.out.println();
    }
}


 
   

3.打印结果

排序前:
8 8 5 2 3 5 6 1 2 9
开始排序…
8 5 2 3 5 6 1 2 8 9 //找到最大的9
5 2 3 5 6 1 2 8 8 9 //找到第二大的8
2 3 5 5 1 2 6 8 8 9 //找到第三大的8
2 3 5 1 2 5 6 8 8 9 //以此类推
2 3 1 2 5 5 6 8 8 9
2 1 2 3 5 5 6 8 8 9
1 2 2 3 5 5 6 8 8 9
1 2 2 3 5 5 6 8 8 9
1 2 2 3 5 5 6 8 8 9
排序完成
排序后:
1 2 2 3 5 5 6 8 8 9

猜你喜欢

转载自www.cnblogs.com/gsqc/p/9266013.html