介绍
分析
基本思想:
1 | 对排序记录关键字从后往前(逆序)进行多遍扫描,当发现两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换 |
算法描述:
- 将A[n]与A[n-1]进行比较,若A[n] < A[n-1],则交换两元素的位置
- 修改数组下标,是需要比较的两个元素为A[n-1]和A[n-2],重复步骤1,直到A[2]和A[1]比较完成为止,即完成第一遍扫描
- 经过第一遍扫描,最小的或最大的已经排到最上面A[1],进行第二遍扫描,只扫描到A[3]与A[2]进行比较为止
- 经过n-1遍扫描,前n-1个数都已经排序完成,最后一个A[n]肯定最大或最小
C实现
1 | /** |
Swift实现
1 | class BubbleSort { |
总结
时间复杂度:
- 最差O(n^2)
- 平均O(n^2)
空间复杂度:
- O(1)
稳定性:
- 稳定