首页 > 编程语言 > 详细

02_排序算法之冒泡排序

时间:2020-09-17 21:41:38      阅读:95      评论:0      收藏:0      [点我收藏+]

1.1 冒泡排序

1.1.1 算法原理

  1. 比较相邻的元素. 如果前一个元素比后一个元素大, 就交换这两个元素的位置.
  2. 对每一对相邻元素做同样的工作, 从开始第一对元素到结尾的最后一对元素. 最终最后位置的元素就是最大值.

1.1.2 API设计

类名 Bubble
构造方法 Bubble(): 创建Bubble对象
成员方法 public static void sort(Comparable[] a); 对数组内的元素进行排序
private static boolean greater(Comparable v, Comparable w);判断大小
private static void exch(Comparable[] a, int i, int j) 交换数组a中索引为i和j处的值

1.1.3 算法实现

package a_sort.a_bubble;

/**
 * 本类为冒泡排序
 */
public class Bubble {
    /**
     * 对数组a中的元素进行排序
     *
     * @param a 需要排序的数组
     */
    public static void sort(Comparable[] a) {
        for (int i = a.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                //比较索引j和j+1处的值
                if(greater(a[j], a[j+1])){
                    exch(a, j, j+1);
                }
            }
        }
    }

    /**
     * 判断元素v是否大于元素w
     *
     * @param v 元素v
     * @param w 元素w
     * @return v大于w则返回true, 否则为false
     */
    private static boolean greater(Comparable v, Comparable w) {
        return v.compareTo(w) > 0;
    }

    /**
     * 元素交换
     *
     * @param a 数组
     * @param i 数组中的元素索引
     * @param j 数组中的元素索引
     */
    private static void exch(Comparable[] a, int i, int j) {
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

1.1.4 算法测试

package a_sort.a_bubble;

import java.util.Arrays;

/**
 * 冒泡排序测试类
 */
public class BubbleTest {
    public static void main(String[] args) {
        Integer[] arr = {4, 5, 6, 3, 2, 1};
        Bubble.sort(arr);

        System.out.println(Arrays.toString(arr));
    }
}

1.1.5 冒泡排序时间复杂度分析

  1. 元素比较的次数为: (n-1) + (n-2) + ...+2 + 1 = n^2/2 - n/2
  2. 元素交换次数数为: (n-1) + (n-2) + ...+2 + 1 = n^2/2 - n/2
  3. 总执行次数为: n^2-n

根据大O推导法则, 冒泡排序时间复杂度为O(N^2), 复杂度比较高, 不适合大量数据排序.

02_排序算法之冒泡排序

原文:https://www.cnblogs.com/coder-Joe/p/13687691.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!