7-2
a.如果所有元素都相同,那么时间复杂度是O(n^2)
b.
def partition(A,p,r):
x=A[p]
low=p
high=p
for j in range(p+1,r):
if A[j]<x:
y=A[j]
A[j]=A[high+1]
A[high+1]=A[low]
A[low]=y
low=low+1
high=high+1
elif A[j]==x:
swap(A[high+1],A[j]) # swap函数要自己写
high=high+1
return low,high
c.
def quicksort(A,p,r):
if p<r:
(low,high)=partition(A,p,r)
qicksort(A,p,low-1)
quicksort(A,high+1,r)
7.4
a.
此题中的代码与书中的例子的区别只在循环的最后一行,而题目中的代码在第二次迭代时,可以完成书中的最后一行的作用,所以可以完成排序。
b.
当输入数组已经排好序时,递归的深度是
Θ
(
n
)
\Theta(n)
Θ(n)
c.
def quick_sort(A,p,r):
while p<r:
q=partition(A,p,r)
if q<int((p+r)/2):
quick_sort(A,p,q-1)
p=q+1
else:
quick_sort(A,q+1,r)
r=q-1