c语言双重指针字符串排序,快速排序(双指针法、挖坑法、先后指针法)递归、非递归实现...

本文详细介绍了使用C语言实现快速排序的三种方法:双指针法、挖坑法和先后指针法,并提供了相应的C语言代码实现。通过这些方法,可以对字符串数组进行排序。此外,还讨论了递归实现快速排序和三数取中优化以降低时间复杂度。
摘要由CSDN通过智能技术生成

前言

快速排序是交换排序中的一种,是Hoare于1962年提出的一种二叉树结构的交换排序方法,相似于二叉树的前序遍历。web

主要思想:

■ 任取待排序元素序列中的某元素做为关键字。

■ 按照该关键字将待排序集合分割成两子序列,左子序列中全部元素均小于基准值,右子序列中全部元素均大于基准值。

■ 而后将左右子序列重复该过程,直到全部元素都排列在相应位置上为止。数据结构

区间划分左右部分常见方式

一、双指针法

实现过程:以下图 !svg

982b27787596f9b63328b4e8a154b1d5.png

过程总结:

■先将begin的索引做为keyIndex记录下来,而后使用两个指针,一个指向end,一个指向begin。

■让end指针先走,找比arr[keyIndex]小的值。而后begin指针开始走,找比arr[keyIndex]大的值。

■而后将begin指针和end指针找到的值交换,重复上述过程直到begin和end指针相遇。

■最后将a[end]和a[keyIndex]交换。性能

C语言代码实现

int PartSort1(int* a, int begin, int end) {

int keyIndex = begin;

//注意必定要让end先移动

while (begin < end) {

while (begin < end && a[end] >= a[keyIndex]) end--;//注意这个地方必定要取等

while (begin < end && a[begin] <= a[keyIndex]) begin++;//注意这个地方必定要取等

swap(a + begin, a + end);

}

swap(a + end, a + keyIndex)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值