Lisp实现快速排序

博客探讨了在Lisp中实现快速排序,特别是采用三向快速排序算法,以解决传统快速排序在处理大量重复数据时效率低下的问题。通过详细解释三向快速排序的伪代码和思想,展示了如何优化排序过程,确保每一步都能有效定位相等元素。
摘要由CSDN通过智能技术生成

  学习语言的过程就是练习语言的过程。快速排序作为20世纪十大算法之一,看看使用lisp如何实现。在实现快速排序的时候,本文实现的三向快速排序。在较老的Unix系统中的qsort函数实际上存在毛病,即当待排序的数据中存在大量的重复数据,快速排序仍然需要执行很长的时间。这个bug在很久之后才被发现。随后Dijkstra提出三向快速排序算法,相对与传统的快速排序需要两个索引,三向快速排序需要三个索引。

  传统快速排序的伪代码如下:

  quick-sort主函数: quick_sort(array, start, end)

  1. 检测输入
  2. parition
  3. 递归调用左边
  4. 递归调用右边

  partition函数的伪代码如下:partition(array, start, end)

  1. 选取pivot
  2. 若当前值(start位置)比pivot小,则++start,
  3. 若当前值(start位置)比pivot大,则向前索引end,直到发现比pivot小的数,然后交换,++start, --end;
  4. 当start>end时,交换pivot处的值和end处的值,返回partition的位置,end
  5. goto 步骤2

  传统的快速排序并没有针对相等这种情况处理,其可以归结到左半边或者右半边。但是其违背了快速排序的想法,即每一步&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值