快速排序练习题

本文详细解析了快速排序算法,包括Partion操作的过程,以及在数组元素相同情况下的改进。证明了Partition的时间复杂度为Θ(n)。探讨了快速排序在不同情况下的时间复杂度,包括非递增序排序的实现。同时,分析了随机化快速排序的期望运行时间,证明其为Ω(nlgn)。
摘要由CSDN通过智能技术生成

伪代码实现:

QuickSort(A,p,r)
 if p < r
    q = Partition(A, p, r);
    QuickSort(A, p, q-1);
    QuickSort(A, q+1, r);


Partition(A, p, r)
x = A[r];
i = p-1;
for j = p to r - 1
    if A[j]<=x
       i = i+1;
       exchange A[i] with A[j];
exchange A[i+1] with A[r];
return i+1;
//其中从1到i是小于x的元素,i+1到r是大于x的元素

一、快速排序的描述

    1、说明Partion在数组A=<13,19,9,5,12,8,7,4,21,2,6,11>上操作的过程。

解:其始,p = 1,r = 12,x = 11,i = 0(此时有0个小于11的元素)

第一次循环:j = 1时,A[1] = 13>11;

第二次循环:j = 2时,A[2] = 10>11;

第三次循环:j = 3时,A[3] = 9<11,此时i = 1,并将A[i]和A[j]交换,得到:

A = <9,19,13,5,12,8,7,4,21,2,6,11>

第四次循环:j = 4时,A[4] = 5<11,此时i = 2,并将A[i]和A[j]交换,得到:

A=<9,5,13,19,12,8,7,4,21,2,6,11>

第五次循环:j = 5时,A[5]=12>11;

第六次循环:j = 6时,A[6] = 8<11,此时i = 3,并将A[i]和A[j]交换,得到:

A=<9,5,8,19,12,13,7,4,21,2,6,11>

第七次循环,j = 7时,A[7] = 7<11,此时i = 4,并将A[i]和A[j]交换,得到:

A=<9,5,8,7,12,13,19,4,21,2,6,11>

第八次循环,j = 8时,A[8] = 4<11,此时i = 5,并将A[i]和A[j]交换,得到:

A=<9,5,8,7,4,13,19,12,21,2,6,11>

第九次循环,j = 9时

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值