排序问题和排序算法
排序是一个经典的重排元素顺序的问题(其元素可以是整型、浮点型、字符串等可比较的类型)。可以重排为递增序列、非递减序列1,递减序列,非递增序列2。
排序算法非常多,各有优势与其限制。
排序通常是大学计算机学科中,介绍算法思想的入门问题。
不失一般性的,假定在本教学中我们只以非递减顺序排序整型,元素无需排重。
冒泡排序的演示
思想
排序问题有大量的算法方案,都提现了计算机思想:
比较
和非比较
的底层策略。- 迭代和递归的实现。
- 分治思想
- 最好/最差/平均时间复杂度分析。
- 随机算法
应用
当数组A(整型数组)被排序后,许多问题都变得很容易:
- 在A中查找值
v
。 - 在(静态)数组A中查找最大/最小,第k大/小值。
- 测试唯一性并删除A中重复的值。
- 查找A中值
v
的个数。 - 计算A与另一个已排序数组B的交集/并集。
- 在A中找到一对数(x,y),x∈A且y∈A,满足
x*y=z
,等等。
算法的缩写
- 基于比较的算法
- BUB - Bubble Sort 冒泡排序
- SEL - Selection Sort 选择排序
- INS - Insertion Sort 插入排序
- MER - Merge Sort(递归实现) 归并排序
- QUI - Quick Sort(递归实现) 快速排序
- R-Q - Random Quick Sort(递归实现) 随机快速排序
- 非比较排序
- COU - Counting Sort 计数排序
- RAD - Radix Sort 基数排序
—OU
名词解释
- 非递减序列
- 非递增序列
1
2
3
41,2,3,4,5 递增序列 - 无重复元素
1,2,2,3,4,4,5,5 非递减序列 - 有重复元素
5,4,3,2,1 递减序列 - 无重复元素
5,4,4,3,2,2,1 非递增序列 - 有重复元素