1. 冒泡排序的思想
冒泡排序是一种交换排序算法,他的思想原理是自下向上进行扫描,扫描过程中相邻关键词两两对比,若为逆序则进行记录交换,一次扫描结束后可以确定一个元素的位置。重复扫描直至没有记录需要交换为止。
2. 复杂度分析
最好的情况:正序,此时需要进行1次扫描,其中n-1次比较,0次交换,所以时间复杂度为O(n),空间复杂度为O(1);
最坏的情况:逆序,此时需要进行(n-1)次扫描,其中(n-1)+(n-2)+…+1=n(n-1)/2次扫描,其中n(n-1)/2次比较,3n(n-1)/2次交换,所以时间复杂度为O(n^2),空间复杂度为O(1);
平均情况:时间复杂度为O(n^2),空间复杂度为O(1)。
3. 改进方法
(1) 设置交换标志位swap。若一次扫描中没有记录发生交换,说明有序,无需下次扫描(上述算法中已使用)。
(2) 保存最后一次记录交换的位置,下次扫描进行到此位置开始即可。因为没有记录交换的部分已经有序。
算法实现如下:
冒泡排序是一种交换排序算法,他的思想原理是自下向上进行扫描,扫描过程中相邻关键词两两对比,若为逆序则进行记录交换,一次扫描结束后可以确定一个元素的位置。重复扫描直至没有记录需要交换为止。
2. 复杂度分析
最好的情况:正序,此时需要进行1次扫描,其中n-1次比较,0次交换,所以时间复杂度为O(n),空间复杂度为O(1);
最坏的情况:逆序,此时需要进行(n-1)次扫描,其中(n-1)+(n-2)+…+1=n(n-1)/2次扫描,其中n(n-1)/2次比较,3n(n-1)/2次交换,所以时间复杂度为O(n^2),空间复杂度为O(1);
平均情况:时间复杂度为O(n^2),空间复杂度为O(1)。
3. 改进方法
(1) 设置交换标志位swap。若一次扫描中没有记录发生交换,说明有序,无需下次扫描(上述算法中已使用)。
(2) 保存最后一次记录交换的位置,下次扫描进行到此位置开始即可。因为没有记录交换的部分已经有序。
算法实现如下:
(3) 双向扫描。对于两头大中间有序的序列,双向扫描可以降低扫描次数,提高效率。