【发布时间】:2019-03-15 19:12:22
【问题描述】:
我正在介绍计数排序算法,并且我了解它的工作原理,但我想知道是否有特定的方法可以证明计数排序是一种稳定的算法。我有一个关于如何归纳证明这一点的想法,但我不确定如何去做。
for i = 1 to k
C[i] = 0
for j = 1 to n
C[A[j]] = C[A[i]] + 1
for i = 2 to k
C[i] = C[i] + C[i-1]
for j=n to 1
B[C[A[j]]] = A[j]
C[A[j]]--
我假设证明将从数组只有一个元素的基本情况开始
基本情况 n = 1,未排序数组 A[1] = a1 ,已排序数组 B[1] = a1
归纳步骤: ??? 我不确定如何处理这种归纳证明。
【问题讨论】:
-
您在第二个循环中有错字,
C[A[i]]应该是C[A[j]]。我会使用反证法。给定两个元素x和y,其中y跟在原始数组中的x之后。假设在输出数组中x跟在y后面,证明这会导致矛盾。