算法之快速排序
快速排序 是1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称为 分治法 (Divide-and-Conquer Method)。 分治法的基本思想 : 将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 快速排序的基本思想 : 设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为: (1) 分解 在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1]和R[pivotpos+1..high],并使 左边子区间中所有记录的关键字均<=基准记录的关键字pivot.key,右边的子区间中所有记录的关键字均>=pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。 (2) 求解 通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]分别进行快速排序。 (3) 组合 因为当“求解”步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,“组合”步骤无须做什么,可看做是空操作。 1 #include <stdio.h> 2 3 int partition(int *a,