Java 实现冒泡排序

2020-04-12  本文已影响0人  又语

本文介绍冒泡排序原理及 Java 语言实现。


目录


冒泡排序原理

  1. 比较相邻的元素,升序时如果第一个比第二个大,就实现交换,降序时如果第一个比第二个小,就实现交换;
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对;
  3. 针对所有的元素重复以上的步骤,除了最后一个;
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码实现

package tutorial.java.util;

public class BubbleSortUtils {

    public static <T extends Comparable> T[] sort(T[] array, SortType sortType) {
        T temp;
        int comparableValue = sortType == SortType.ASC ? 1 : -1;
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j].compareTo(array[j + 1]) == comparableValue) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        return array;
    }

    public static enum SortType {
        ASC, DESC;
    }
}

单元测试:

package tutorial.java.util;

import org.apache.commons.lang3.StringUtils;
import org.junit.Assert;
import org.junit.Test;

public class BubbleSortUtilsTest {

    @Test
    public void test() {
        Integer[] data = {10, 5, 1, 20, 3, 8};
        Integer[] asc = BubbleSortUtils.sort(data, BubbleSortUtils.SortType.ASC);
        Assert.assertEquals("1,3,5,8,10,20", StringUtils.join(asc, ","));
        Integer[] desc = BubbleSortUtils.sort(data, BubbleSortUtils.SortType.DESC);
        Assert.assertEquals("20,10,8,5,3,1", StringUtils.join(desc, ","));
    }
}
上一篇下一篇

猜你喜欢

热点阅读