本文介绍冒泡排序原理及 Java 语言实现。
目录
- 冒泡排序原理
- 代码实现
冒泡排序原理
- 比较相邻的元素,升序时如果第一个比第二个大,就实现交换,降序时如果第一个比第二个小,就实现交换;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码实现
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, ","));
}
}
网友评论