分治算法的经典案例——快速排序

一 点睛

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据小,然后按此方法对这两部分分别进行快速排序,整个排序过程可以递归进行,以达到整个数据变成有序序列。

合并排序每次都是从中间位置把问题一分为二,一直分解到不能再分时再进行合并操作。合并排序的划分很简单,但合并操作需要在辅助数组中完成,是一种异地排序的方法。合并排序分解容易、合并难,属于“先易后难”。而快速排序是原地排序,不需要辅助数组,但分解困难、合并容易,属于“先苦后甜”。

二 算法设计

快速排序是基于分治策略的,其算法思想如下。

1 分解

先从数列中取出一个元素作为基准元素。以基准元素为标准,将问题分解为两个子序列,使小于或等于基准元素的子序列在左侧,使大于基准元素的子序列在右侧。

2 治理

对两个子序列进行快速排序。

3 合并

将排好序的两个子序列合并在一起,得到原问题的解。

三 对基准元素的选取

  • 一般有以下几种方法。
  • 取第一个元素
  • 取最后一个元素
  • 取中间位置元素
  • 取第一个元素,最后一个元素、中间位置的元素三者位置的中位数
  • 取第一个元素和最后一个元素之间位置的随机数 k (low <= k <= high),选第 k 个位置作为基准元素

四 图解

这里选取第一个元素作为基准。以说明快速排序的执行过程。

1 取当前待排序的第一个元素作为基准元素 pivot = r[low],i = low,j = high。

2 从右向左扫描

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值