数据结构与算法分析——快速排序

 

前几天看到数据结构与算法分析中的快速排序,觉得挺简洁的,决定自己写一下。算法用三取中值法来划分,当元素小于十个时候用插入排序,开始以为是当输入元素个数小于十个的时候就用插入排序,大于十个就用快排。大错!我开始只写了快排程序,后来老是数组越界,郁闷了一天,这么经典的书上也会数组越界。今天突然发现是我理解错了,他是当元素划分到小于十个的时候就用快速排序,这是一种快排的优化!哎,这是头脑太简单了!嘿嘿后面在总结一下该算法的优点,也算不上什么总结,自己留着就当学习笔记。

 

 

代码几乎和书上的一致,只是我看到很多地方说元素小于8个的时候用插入法最好,所以我就改为了小于8就用插入算法。

讨论该算法对比与我之前写的一个简陋的快速排序算法对比分析一下吧,嘿嘿

 

 

当然用开始位置作为枢纽元总是不怎么好的,尤其在有很多排好序的数据中效率将会非常低。这里书中代码采用了较为平衡的三取中值法,取开始,中间, 最后三者中间值。其次是采用的是交换数据,即开始的最小,中间第二,最后的最大就相当于交换了一次,使得待排序的元素减为n - 2 。有人说在大型数据中可以使时间提高5%左右,不知是否?嘿嘿,不过这种思想是值得称赞的。其次与插入排序一起使用,进一步优化代码。而且加入插入排序后有效的避免数组越界,巧妙的避免数组越界。其实关于优化快排还有很多方法,如改为非递归,进一步改进划分等等。不过书中采用递归这种简洁的代码,加上一些简单而又使用的优化,既有思想有简单明了,不愧为经典之作啊!嘿嘿

2010-05-15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值