归并排序(Merge Sort)
核心思想——把数组从中间分成前后两部分,分别排序后再合并在一起
分治思想——分治就是分而治之,将一个大问题分解成小的子问题来解决
分治是一种解决问题的处理思想,递归是一种编程技巧
合并
- 申请一个临时数组 tmp,大小与 A[p…r]相同
- 用两个游标 i 和 j,分别指向 A[p…q]和 A[q+1…r]的第一个元素
- 比较这两个元素 A[i]和 A[j],将较大/较小的元素放入临时数组,且游标后移一位
- 直到其中一个子数组中的所有数据都放入临时数组中,再把另一个数组中的数据依次加入到临时数组的末尾
- 最后把临时数组 tmp 中的数据拷贝到原数组 A[p…r]中
快速排序(Quicksort)
核心思想
- 选择任意一个数据作为 pivot(分区点)
- 遍历 p 到 r 之间的数据,将小于 pivot 的放到左边、大于 pivot 的放到右边、pivot 放到中间
- 直到区间缩小为 1说明所有的数据有序