本质上就是将给定数字按照从大到小的顺序排序。
排序算法:快速排序。
由于给定的是vector<int>
,而不是int
数组,因此我们需要写一个快速排序的迭代器版本。
- 递归终止条件:当区间只有一个元素或者没有元素的时候,结束遍历。即
beg + 1 >= end
;之所以这样写,是因为[beg,end)
表示的是前闭后开区间。- 一次快速排序结束后,迭代器
i
指向的是右端区间的起点,也指向左端区间最后一个元素的下一个位置。
插入排序的基本思想是:维护一个有序序列。初始时有序序列只有一个元素,每次将新的元素插入有序序列中,有序序列长度就会加一,直到所有元素都加入有序序列中为止。
具体步骤如下:
- 判断链表是否为空。若为空,直接返回。
- 创建三根指针,分别指向有序序列的头结点,尾结点以及待移动(排序)节点。
- 如果待排序节点的值大于尾结点的值,那么我们只需要更新尾结点。
- 如果待排序节点的值小于等于头结点的值,那么我们需要将待排序节点移动到头结点位置之前,并更新头结点。
- 如果以上两种情况都不成立,说明我们应该将待排序节点插入到有序序列中间。这就要求我们从头结点开始查找第一个大于等于待排序节点的值,然后将节点插入即可。
- 更新待排序节点,重复上述步骤。
使用链表实现归并排序。参考官方题解——自顶向上归并排序
方法:基于快速排序的选择算法。