1.排序
常用的排序算法有快速排序,归并排序.
(1). 快速排序
以下是快速排序的基本步骤:
a. 选择一个基准元素:通常选择序列的第一个元素作为基准元素。
b. 划分过程:将待排序的序列重新排序,所有比基准元素小的元素放在基准元素的左边,所有比基准元素大的元素放在基准元素的右边。在这个分区结束之后,该基准元素就处于数列的中间位置。这个过程称为分区操作(partition
)。
递归地(recursive
)把小于基准值元素的子序列和大于基准值元素的子序列排序:递归地将上述两个子序列进行快速排序。
在每次划分后,左右两边元素数量接近时时间复杂度可达Θ(nlg(n))
,最差下退化为Θ(n^2)
.
(2). 归并排序
归并排序(Merge Sort
)是一种分治思想的排序算法,它将待排序的序列划分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列。归并排序的时间复杂度为O(n log n)
,且是稳定的排序算法。稳定指的是相等元素排序前后相对位置不变.
下面是归并排序的基本步骤:
a. 分解:将序列分解成两个长度相等的子序列,直到子序列的长度为1
。
b. 递归进行排序并合并:递归地对子序列进行归并排序,并将已排序的子序列合并成一个大的有序序列,直到合并为1
个完整的序列为止。
合并两个有序子序列的过程是归并排序的关键部分,具体步骤如下:
b.1. 创建两个指针,分别指向两个子序列的起始位置。
循环迭代b.2
,直到其中一个子序列的所有元素都放入了临时序列。
b.2. 比较两个指针所指的元素,将较小的元素放入新的临时序列中,并将该指针向后移动一位。
b.3. 将另一个子序列中剩余的元素(如果有的话)直接追加到临时序列的末尾。
b.4. 将临时序列复制回原序列中,以完成合并操作。
2.搜索
对有序集合可使用二分搜索.
二分搜索(Binary Search
)是一种在有序集合中查找某一特定元素的搜索算法。搜索过程从集合的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在集合大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。