数据结构之快速排序

          快速排序是交换排序的一种,实质上是对冒泡排序的一种改进。它的基本思想是:在 n 个记录中取某一个记录的键值为标准,通常取第一个记录的键值为基准,通过一趟排序将待排序的记录分为小于或大于这个键值的两个独立的部分,这时一部分的记录键值均比另一部分记录的键值小,然后对这两部分记录继续分别进行快速排序,已达到整个序列有序。

那么一趟排序的具体过程是如何操作的呢?我们边用一组数来排序,一边来理它的操作步骤:这里有几个数为:45 38 66 90 88 10 25 45


附设两个指针 i 和 j ,它们的初值分别为 1 和 n ,且把R[1]送入一个临时变量temp里保存。这时R[1]空出了空间。以上面的数来说,即先将第一个数45保存到临时变量temp里,这时第一个位置空出。

首先 j 从 n 起逐渐减小找到第一个满足R[j].key < temp.key 的记录,这时将R[j]移至R[i]的位置;这时R[j]空出了空间。以上面的数来说,即j 从 45 开始向左直到找出小于临时变量里存放的45,显然符合条件的这个数为 25 ,这时将 25 移至 第一个位置,这时空出了原来25所在位置的空间。这一趟走完后,这组数的序列变成:

25 38 66 90 88 10 空 45


              然后令 i 自 i+1 起逐渐增大找到第一个满足 R[i].key>temp.key的记录,这时将R[i] 移至 R[j] 的位置;接着 j 自 j-1 起重复上述过程,直至 i = j,此时i便是记录temp所应在的位置。

以上面的数来说,即从R[2],也就是38开始,直到找到第一个大于temp里面保存的45,显然满足条件的数是66,然后将66移至上一轮空出的R[j]的位置。这一趟走完后,这组数的序列变成:

25 38  空 90 88 10 66 45


             然后再从10开始找出第一个小于临时变量temp里保存的45,显然满足条件的数为10,移至上一轮空出的位置,这一趟走完后,这组数的序列变成:

25 38 10 90 88 空 66 45


接着继续从90开始找大于temp里保存的45,显然满足条件的数为90,移至上一轮空出的位置,这一趟走完后,这组数的序列变成:

25 38 10 空 88 90 66 45


接着再从88找小于45的数,显然这时已经没有符合条件的数了。所以,空的位置,就是temp里数的正确位置。则最后序列变成:

25 38 10 45 88 90 66 45

这时再看这组数,就达到了我们的目的:45前面的数都比45小,而其后面的数都比45大。然后再分别对这前后两部分用这种方式排序,直至整个序列有序。


这就是快速排序的过程,赶紧拿起笔来试试吧!




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 81
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 81
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值