一、代码
int []a={1,2,7,4,8,2,5};
System.out.println("排序之前:");
for (int i : a) {
System.out.print(i+"\t");
}
//冒泡排序实现
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
System.out.println("\n排序之后:");
for (int i : a) {
System.out.print(i+"\t");
}
二、使用场景
现在有一个 List ,里面的元素要根据时间从小到大排好序,当然时间可能为 null,如果为空,则放到最前,代码如下:
List<String> list = new ArrayList<>();
list.add("2016");
list.add("2013");
list.add("2015");
list.add(null);
list.add(null);
list.add(null);
list.add("2017");
list.add("2018");
list.add(null);
list.add("2017");
list.add("2011");
list.add("2012");
System.out.println("排序之前:");
for (String i : list) {
System.out.print(i + "\t");
}
DateFormat dateFormat = new SimpleDateFormat("yyyy");
//冒泡排序实现
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - i - 1; j++) {
String dateStr1 = list.get(j);
String dateStr2 = list.get(j + 1);
Date date1 = null;
Date date2 = null;
if (dateStr1 == null || "".equals(dateStr1)) {
dateStr1 = "0000";
}
if (dateStr2 == null || "".equals(dateStr2)) {
dateStr2 = "0000";
}
try {
date1 = dateFormat.parse(dateStr1);
date2 = dateFormat.parse(dateStr2);
} catch (ParseException e) {
e.printStackTrace();
}
if (date1 != null && date2 != null) {
if (date1.getTime() > date2.getTime()) {
Collections.swap(list, j, j + 1);
}
}
}
}
System.out.println("\n排序之后:");
for (String i : list) {
System.out.print(i + "\t");
}
其中的 Collections.swap(list, j, j + 1);
可以交换 List 中两个元素的位置
三、原理
比较数组中相邻两个元素,将大的或小的值交换到右端。