冒泡排序性能数据:
package com.shan.bubbleSort;
/**
*
* @author shan
* 冒泡排序算法:需要便利几次数组,在每次遍历中,比较相邻的元素。如果某一对元素是降序,
* 则交换它们之间的值;否则保持不变。
* 特点:第一次遍历完成,最后一个元素为数组中的最大元素
* 第二次遍历完成,倒数第二个元素为数组中的第二大元素
* 如此持续到所有元素排好。
* 根据特点我们在第 k 次遍历中不需要考虑最后的 k-1 个元素,因为它们已经排好序。
*
* 对于 list.length 长度的数组,需要 list.length -1 次遍历
*
* 优化方案:
* 因为如果在某次遍历中没有发生元素的交换,说明已经排好序。
*
*/
public class BubbleSort {
public static void bubbleSort(int[] list) {
boolean needNextPass = true;
// 对于 list.length 长度的数组,需要 list.length -1 次遍历
for (int k = 1; k < list.length && needNextPass; k++) {
needNextPass = false;
// 第 k 次遍历中不需要考虑最后的 k-1 个元素,因为它们已经排好序。
for (int i = 0; i < list.length - k; i++) {
// 在每次遍历中,比较相邻的元素。如果某一对元素是降序,则交换它们之间的值;否则保持不变。
if (list[i] > list[i + 1]) {
int temp = list[i];
list[i] = list[i + 1];
list[i + 1] = temp;
needNextPass = true;
}
}
}
}
public static void main(String[] args) {
int[] list = { 2, 3, 2, 5, 1, 6, -2, 3, 14, 12 };
bubbleSort(list);
for (int i = 0; i < list.length; i++) {
System.out.print(list[i] + " ");
}
}
}
输出:
-2 1 2 2 3 3 5 6 12 14