Skip to content

Commit

Permalink
[11_sorts] bubble sort.
Browse files Browse the repository at this point in the history
  • Loading branch information
Liam0205 committed Oct 16, 2018
1 parent 76be307 commit 737b72c
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions notes/11_sorts/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,29 @@
经过排序算法处理后,值相同的元素,在原序列和排序后序列中的相对位置保持不变,则称该排序算法是稳定的。

> 待排序的 `item` 并不是简单的值,而是一个基于对象中的某个 `key` 进行排序时,排序的稳定性就有意义了。
## 冒泡排序

* 每次循环都从序列起始位置开始
* 循环中的每个动作,都对比相邻两个元素的大小是否满足偏序要求,若不满足,则交换顺序

分析:

* 原地排序
* 稳定排序(偏序关系是严格的偏序关系,如 `<``>`
* 时间复杂度
* 最好 $O(n)$
* 最坏 $O(n^2)$
* 平均 $O(n^2)$

### 冒泡排序的平均时间复杂度非严格分析

* 有序度:序列中满足偏序关系的两两组合的元素对的个数
* 满有序度:排序完成的序列的有序度,它等于 $n(n - 1) / 2$
* 逆序度:序列中不满足偏序关系的亮亮组合的元素对的个数

显然,$\text{逆序度} = \text{满有序度} - \text{有序度}$。

在冒泡排序中,每产生一次「交换」操作,$\text{逆序度}--$。于是,平均情况下,需要 $n(n - 1)/4$ 次交换操作,它已经是 $O(n^2)$ 了。因此,尽管比较操作的数量会大于交换操作的数量,但我们依然能说,冒泡排序的平均时间复杂度是 $O(n^2)$。

> 分析过程不严格,但足够说明问题。

0 comments on commit 737b72c

Please sign in to comment.