AcWing 785. 快速排序算法的证明与边界分析 您所在的位置:网站首页 10-0点785 AcWing 785. 快速排序算法的证明与边界分析

AcWing 785. 快速排序算法的证明与边界分析

2024-07-16 02:43| 来源: 网络整理| 查看: 265

更新:

2022.12.10

增加分析 6 和分析7, 修整了格式

2023.4.25

调整结构, 修改细节

2023.5.24

增加 python 版代码

算法证明

算法证明使用算法导论里的循环不变式方法

快排模板(以j为分界)

快排属于分治算法,分治算法都有三步:

分成子问题 递归处理子问题 子问题合并 void quick_sort(int q[], int l, int r) { //递归的终止情况 if(l >= r) return; //第一步:分成子问题 int i = l - 1, j = r + 1, x = q[l + r >> 1]; while(i < j) { do i++; while(q[i] < x); do j--; while(q[j] > x); if(i < j) swap(q[i], q[j]); } //第二步:递归处理子问题 quick_sort(q, l, j), quick_sort(q, j + 1, r); //第三步:子问题合并.快排这一步不需要操作,但归并排序的核心在这一步骤 } 待证问题

while 循环结束后,q[l..j] = x

q[l..j] = x, q[j] = j

正常情况下,按照循环不变式,我们应该会觉得结果已经显然了

因为i >= j,q[l..i] = x

所以按照j来划分的话,q[l..j] = x是显然的

可是,最后一轮循环有点特殊,因为最后一轮循环的if语句一定不会执行

因为最后一轮循环一定满足 i >= j,不然不会跳出while循环的,所以if语句一定不执行

正确分析:

由于最后一轮的if语句一定不执行

所以,只能保证:

q[l..i-1] = x

q[j+1..r] >= x, q[j] = j

由q[l..i-1] = j(i-1 >= j-1) 和 q[j] x) 中不能用q[i] = x

假设q[l..r]全相等

则执行完do i++; while(q[i] = r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while(i < j) { do i++; while(q[i] > x); // 这里和下面 do j--; while(q[j] < x); // 这行的判断条件改一下 if(i < j) swap(q[i], q[j]); } quick_sort(q, l, j), quick_sort(q, j + 1, r); }

python版

def quick_sort(q, l, r): if l >= r: return i = l - 1 j = r + 1 x = q[l + r >> 1] while i < j: i += 1 while q[i] < x: i += 1 j -= 1 while q[j] > x: j -= 1 if i < j: q[i], q[j] = q[j], q[i] quick_sort(q, l, j) quick_sort(q, j + 1, r) n = int(input()) q = list(map(int, input().split())) quick_sort(q, 0, n - 1) print(' '.join(list(map(str, q)))) 总结快排思路

有数组 q, 左端点 l, 右端点r

确定划分边界 x

将 q 分为 =x 的两个小数组

$i$ 的含义: $i$ 之前的元素都 $\leq x$, 即 $q[l..i-1]$ $\leq x$

$j$ 的含义: $j$ 之后的元素都 $\geq x$, 即 $q[j+1..r]$ $\geq x$

结论: $while$ 循环结束后, $q[l..j]$ $\leq x,q[j+1..r]$ $\geq x$

简单不严谨证明:

$while$ 循环结束时, $i \geq j$

若 $i > j$ , 显然成立

若 $i = j$

$\because$ 最后一轮循环中两个 $do-while$ 循环条件都不成立

$\therefore$ $q[i] \geq x, q[j] \leq x$

$\therefore$ $q[i] = q[j] = x$

$\therefore$ 结论成立

递归处理两个小数组



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有