经典排序算法
插入排序
插入排序是一种简单直观的排序算法,其基本思想是在待排序的序列中,假设前面的元素已经排好序,然后将待排序元素插入到已排好序的序列中的适当位置,直到全部元素都插入完毕
快速排序
快速排序是一种高效的排序算法,其基本思想是通过分治的策略将待排序序列分成两个子序列,其中一个子序列的所有元素都小于另一个子序列的所有元素,然后递归地对两个子序列进行排序,直到整个序列排好序为止
快速排序的实现过程如下:
- 选择一个元素作为基准元素(pivot),将序列分成两部分,其中一部分所有元素都小于基准元素,另一部分所有元素都大于等于基准元素。这个过程称为 partition 操作。
- 递归地对两部分分别进行快速排序,直到整个序列排好序为止。
堆排序
堆排序是一种高效的排序算法,其基本思想是使用堆这种数据结构来维护待排序的序列,利用堆的性质将堆顶元素与最后一位元素交换,然后对剩余的元素重新构建堆,不断重复这个过程,直到整个序列排好序为止
堆排序的实现过程如下:
- 将待排序的序列构建成一个最大堆(或最小堆)。
- 取堆顶元素(最大元素或最小元素)并与最后一位元素交换。
- 从堆顶开始重新构建最大堆(或最小堆),不断重复步骤2和步骤3,直到整个序列排好序为止。
比较
pdqsort
pdqsort的算法过程是,首先对序列中的三个元素a[mid-1]、a[mid]、a[mid+1]进行三点样本选择,并将它们按升序排列,然后选取中间的元素a[mid]作为枢轴元素。接着维护三个指针,分别指向当前已经处理好的小于、等于和大于枢轴元素的范围。