package SortArith;
/**
* 冒泡排序
* 时间复杂度:O(n2)
* 空间复杂度:O(1)
* 稳定排序
* @author lwk
*
*/
public class BubbleSort {
//初级版冒泡排序 低效率 每个关键字与它后面每个关键字进行比较
public static void bubbleSort1(int[] array){
if(array == null || array.length == 0){
return;
}
for (int i = 0; i < array.length - 1 ; i++) {
for (int j = i + 1; j < array.length; j++) {
if(array[i] > array[j]){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
//正宗冒泡排序
//一次排序结果为确定首位为最小值,然后一次把剩下记录中的最小值移至第二位、第三位。。。。
public static void bubbleSort2(int[] array) {
if(array == null || array.length == 0){
return;
}
for (int i = 0; i < array.length; i++) {
//相邻位置进行比较,从最后一个元素与倒数第二个元素比较开始
for (int j = array.length-1; j > 0; j--) {
if(array[j] < array[j-1]){//较小的数逐渐往前移,最终确定第一位为最小数
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
}
//冒泡排序 优化
//加一个标识符flag,减少比较次数,若发现上一次没有进行一次交换,则说明排序已完成
public static void bubbleSort3(int[] array) {
if(array == null || array.length == 0){
return;
}
boolean flag = true;
for (int i = 0; i < array.length && flag; i++) {
flag = false;
for (int j = array.length-1; j > 0; j--) {
if(array[j] < array[j-1]){//较小的数逐渐往前移,最终确定第一位为最小数
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
flag = true;
}
}
}
}
}