快速排序和变种快排

本文详细介绍了快速排序的基本思想、算法流程和具体实现,包括如何选择基准值,以及如何进行一趟快速排序。此外,还探讨了快速排序的变种,如随机化快排、平衡快排和外部快排,旨在提高排序效率并应对特定数据情况。
摘要由CSDN通过智能技术生成

快速排序

  • 主要思想

假设我们现在要对一个数组ar[]进行排序。首先我们需要随机选择一个基准值(一般选数组的首元素),然后将数组中的其他值与其进行比较,将小于它的数放在其左侧,大于的放在右侧(假定按从小到大排序)。这就完成了一趟快速排序

  • 算法思路

假定现在有ar[0]—ar[n-1]这n个数据
1.将变量i指向数组的首元素,j指向数组的最后一个元素,key表示基准值(即ar[0]的值)
2.固定i的值,从j开始向前搜索,即从后向前进行(j–),找到第一个小于key的值就交换ar[i]ar[j]的值
3.固定j的值,从i开始向后搜索,即从前向后进行(i++),找到第一个大于key的值就交换ar[i]ar[j]的值
4.重复2、3步,直到i==j。(即在第2步中,若进行了交换后直接执行第3步,若第3步也进行交换后经判断i!=j的话,则又从第2步开始继续进行查找交换)

  • 数据分析

原始数据如下:

ar[0] ar[1] ar[2] ar[3] ar[4] ar[5] ar[6] ar[7] ar[8]
22 45 12 9 5 34 10 3 27

①.i=0; j=8; key=22;执行算法思想中的第2步,从后向前找到第一个小于key的值(ar[7]),此时i=0; j=7; key=22; 交换之后数据如下:

<
ar[0]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值