排序:快速排序(hoare版本)
目录
快速排序:
概念:
动画分析:
代码实现:
代码分析:
代码特性:
常见问题:
快速排序:
概念:
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:
任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列。
左子序列中所有元素均小于基准值,右 子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
动画分析:
如上面动画所展示,选择数组最左端的元素作为基准值key ,又在数组的两端设置两个遍历变量进行数组的遍历。
左边的遍历负责查找比key大的数值,右边的遍历负责查找比key小的数值。
当左边遇到了比key大的值停下,等待右边遇到比key小的值,随后二者所指向的元素进行交换,进行多次操作,等到二者相遇后再将处在最左端的key值和相遇位置的元素进行交换。
这样做的目的是使用key值把整个数组进行了分隔,左端的元素都比key小,右端的元素都比key大。
随后便是将分隔的两部分 分别 进行刚才的操作,继续分隔成两部分直到不能再分隔位置。
代码实现:
代码分析:
代码特性:
常见问题:
- 遇到等于选项时该怎么办?
- key值是否会产生变动?
- 相遇时,如果条件没有达成可能不会停下。
- key易写成局部变量
- 第一趟的左端遍历变量的初始下标位置是0还是1?
- 遇到相等的元素是否需要停下遍历变量的前进循环?