一、思路:
冒泡排序需要经过n-1趟比较:
第1趟:依次比较索引为0和1、1和2、2和3……n-2和n-1的元素的值,如果前一个元素的值比后一个元素大,则交换二者的位置;
第2趟:依次比较索引为0和1、1和2、2和3……n-3和n-2的元素的值,如果前一个元素的值比后一个元素大,则交换二者的位置;
……
二、源码:
package me.elemon.algorithm;
import java.util.Arrays;
/**
* 排序
*
* @author czj
* @version 1.0
* @datetime 11:24:07 PM, Mar 26, 2018
*/
public class SortTest {
// -------------------------------------------------------------------------
// 内部类
// -------------------------------------------------------------------------
/**
* 元数据
*
* @author czj
* @version 1.0
* @datetime 11:19:40 AM, Mar 26, 2018
*/
private static class Data implements Comparable<Data> {
private int value;
private String flag;
public Data(int value, String flag) {
this.value = value;
this.flag = flag;
}
@Override
public String toString() {
return value + flag;
}
@Override
public int compareTo(Data data) {
return this.value > data.value ? 1 : (this.value == data.value ? 0 : -1);
}
}
// -------------------------------------------------------------------------
// 排序方法
// -------------------------------------------------------------------------
/**
* 元素交换
*
* @param datas
* @param i
* @param j
* @return void
*
* @author czj
* @version 1.0
* @datetime 11:31:42 AM, Mar 26, 2018
*/
private static void swap(Data[] datas, int i, int j) {
Data data = datas[i];
datas[i] = datas[j];
datas[j] = data;
}
/**
* 交换排序:冒泡排序
*
* @param datas
* @return void
*
* @author czj
* @version 1.0
* @datetime 4:41:37 PM, Mar 28, 2018
*/
public static void bubbleSort(Data[] datas) {
for (int i = 0; i < datas.length - 1; i++) {
// 记录是否发生元素交换
boolean flag = false;
for (int j = 0; j < datas.length - 1 - i; j++) {
if (datas[j].compareTo(datas[j + 1]) > 0) {
swap(datas, j, j + 1);
flag = true;
}
}
System.out.println("[" + i + "]: " + Arrays.toString(datas));
if (!flag) {
break;
}
}
}
// -------------------------------------------------------------------------
// 测试
// -------------------------------------------------------------------------
public static void main(String[] args) {
Data[] datas = {
new Data(9, ""), new Data(16, ""), new Data(21, "*"),
new Data(23, ""), new Data(30, ""), new Data(49, ""),
new Data(21, ""), new Data(30, "*")
};
System.out.println("------------------------------------------------------------");
System.out.println("before sort: " + Arrays.toString(datas));
System.out.println("------------------------------------------------------------\n\n");
// 排序
bubbleSort(datas);
System.out.println("\n\n------------------------------------------------------------");
System.out.println("after sort: " + Arrays.toString(datas));
System.out.println("------------------------------------------------------------");
}
}