Java 冒泡排序实现

作者: 虹猫日志 | 来源:发表于2019-11-19 16:52 被阅读0次

算法描述

  • 依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

思路描述

  1. 第一趟排序将第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。

  2. 第二趟将第二大的数移动至倒数第二位。依次类推,每一趟比较次数减少1。
    ......
    共需要n-1趟

排序效果如下图:

素材来源于网络收集

Java 代码实现

import java.util.Arrays;

/**
 * @Author: Haotian
 * @Date: 2019/11/19 15:43
 * @Description: 冒泡排序
 */
public class Sort {
    public static void main(String[] args) throws MyException {
        //测试排序
        int[] array = {2, 18, 1, 19, 16, 20};
        bubbleSort( array );
    }

    /**
     * 冒泡排序
     *
     * @param array 待排序数组
     * @throws MyException 自定义的异常类
     */
    private static void bubbleSort(int[] array) throws MyException {
        //边界判断,保证程序健壮性
        if (array == null || array.length == 0) {
            throw new MyException( "the array is null or no element..." );
        }
        if (array.length == 1) {
            return;
        }
        //冒泡开始
        for (int i = 0; i < array.length; i++) {
            // 若为 true,则表示此次循环没有进行交换,即待排序列已经有序,排序已然完成
            boolean success = true;
            //每次循环后最后一个数不再参与下一次排序,所以减一
            for (int j = 0; j < array.length - i - 1; j++) {
                //前一位数大于后一位数才进行交换
                if (array[j] > array[j + 1]) {
                    //临时变量接收较大数
                    int temp = array[j];
                    //大变小
                    array[j] = array[j + 1];
                    //小变大
                    array[j + 1] = temp;
                    success = false;
                }
            }
            //排序完成即可退出循环
            if (success) {
                break;
            }
            //控制台打印查看
            System.out.println( "第" + (i + 1) + "轮后: " + Arrays.toString( array ) );
        }
    }

    /**
     * 自定义异常用于处理
     */
    public static class MyException extends Exception {
        public MyException(String message) {
            super( message );
        }
    }
}

复杂度

  • 时间复杂度
    两层循环,第1次遍历n次(n个元素),第二次遍历n-1次,... 依次类推。因此,表达式如下:
时间复杂度
  • 空间复杂度
    没有利用新的数组来帮助完成排序算法,因此认为其空间复杂度为O(1)

相关文章

  • 冒泡排序 选择排序

    冒泡排序 java 实现 C 实现 选择排序 java 实现 C 实现

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • Java 实现冒泡排序

    本文介绍冒泡排序原理及 Java 语言实现。 目录 冒泡排序原理 代码实现 冒泡排序原理 比较相邻的元素,升序时如...

  • 常用排序算法的Java实现

    冒泡、插入、选择、归并、快速排序的Java实现

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

  • java 实现排序算法之「选择排序」

    java 实现排序算法系列 继冒泡排序算法之后,选择排序终于和大家见面了。为什么冒泡排序之后要说选择排序呢,是因为...

  • java快速学习排序---冒泡排序

    1.java实现冒泡排序 (1)、图解冒泡排序 (2)、冒泡排序原理 把相邻的元素两两比较,当一个元素大于它右侧相...

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 排序算法——冒泡排序

    冒泡排序(Bubble sort) 目录 1. 基本原理 图解 2. 代码实现 java 一、基本原理 冒泡排序(...

  • 必须知道的排序算法和对应语言的实现

    必须知道的排序算法—Java实现 1 冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较...

网友评论

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

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