冒泡排序

冒泡排序是一种基于比较的排序算法,每次冒泡操作都会比较相邻的两个数,检查是否满足大小关系,如果不满足就互换。一次冒泡操作至少让一个元素移动到家排序后所在的位置。重复n次就完成了排序。

还是图比较直观,以5、3、8、2、7、1数据为例,来画个图。

 

我的冒泡实现

 

这是我最原始的实现,冒泡排序

学习笔记--数据结构与算法--冒泡排序

这样过程进行6次就完成了冒泡的排序

学习笔记--数据结构与算法--冒泡排序

 

这是我实现的冒泡排序的代码:

public void sort(Integer[] data) {

 
if (data == null || data.length <= 1) {
   
return;
 
}

 
for (int i = 0; i < data.length; i++) {
   
boolean breakFlag = false;
   
// 进行冒泡操作,
   
for (int j = 0; j < data.length; j++) {
     
//进行当前的元素每一项比较
     
if (data[i] < data[j]) {
        Integer item = data[i]
;
       
data[i] = data[j];
       
data[j] = item;
       
breakFlag = true;
     
}
    }

    System.
out.println("当前前第:" + i + "次:" + Arrays.toString(data));

   
// 当一次冒泡没有数据进行交换,说明排序已经完成
   
if (!breakFlag) {
     
break;
   
}
  }
}

 

我的冒泡还有很大的改进空间,再来一个标准的冒泡排序的实现

 

老师的标准的冒泡排序:

 

这是老师的标准的冒泡排序算法的一次冒泡操作

学习笔记--数据结构与算法--冒泡排序

再来看看完整的一个冒泡的过程:

学习笔记--数据结构与算法--冒泡排序

标准的冒泡排序的算法的实现:

public class BubbleSort<T> implements SortInf<T> {

 
@Override
 
public void sort(T[] data) {
   
if (null == data || data.length <= 1) {
     
return;
   
}

   
int dataLength = data.length;

    for
(int i = 0; i < dataLength; i++) {
     
boolean brakFlag = false;
     
// 一次冒泡操作,至少一个元素放置到了排序之后所在的位置,比较交换的次数也会越来越少
     
for (int j = 0; j < dataLength - i - 1; j++) {
       
// 过行数据中的两两比较,(x < y) ? -1 : ((x == y) ? 0 : 1);
        //
在数值的比较中,如果左边的数比右边的数小,则返回-1
       
if (((Comparable) data[j]).compareTo(data[j + 1]) > 0) {
         
T dataTmp = data[j];
         
data[j] = data[j + 1];
         
data[j + 1] = dataTmp;
         
brakFlag = true;
       
}
      }
      System.
out.println("当前第:" + i + "次:" + Arrays.toString(data));
     
// 如果一次交换则不存在数据交换时,则说明数据已经冒泡完成,无需再冒泡操作
     
if (!brakFlag) {
       
break;
     
}
    }
  }
}

 

冒泡排序总结

算法名称

最好情况时间复杂度

最好情况的原始数据

最坏情况时间复杂度

最坏情况的原始数据

平均情况时间复杂度

是否基于比较

空间复杂度

是否稳定排序算法

冒泡排序

O(N)

原始数据已经是有序,元需交换

O(学习笔记--数据结构与算法--冒泡排序 )

原始数据倒序排列

O(学习笔记--数据结构与算法--冒泡排序 )

 

O(1)

原地排序算法

(在相等情况下不做交换)

 

相关文章:

  • 2022-12-23
  • 2021-05-18
  • 2021-11-16
  • 2022-01-07
  • 2021-10-30
  • 2022-01-25
  • 2021-08-31
  • 2021-07-02
猜你喜欢
  • 2021-07-15
  • 2021-08-04
  • 2021-05-24
  • 2021-04-07
  • 2022-02-17
  • 2021-11-04
  • 2021-10-19
相关资源
相似解决方案