快速排序
大家看到快速排序,想必都会觉得此类排序方法很快吧。的确,该种算法排序效率比较高。那么,什么是快速排序呢?
在快速排序中,选择一个基准值,后,遍历这个数列,通过一定的划分算法,将基准值放到合适的位置,若是升序排序,则基准值的前面全部是小于基准值的数,其后全是大于基准值的数,即通过一趟快速排序后,基准值找到了自己合适的位置,继续递归进行快速排序,直到整个数列变成有序。
快速排序其一的划分为霍尔划分,接下来我们就看看霍尔划分是如何实现的吧
霍尔划分
选定一个基准值,规定begin指向最左边的值,end指向最右边的值。从end向前找第一个小于基准值的数,找到后,再从begin向后寻找第一个大于基准值的数,此时交换两个数后,继续从此刻end的位置向前找第一个小于基准值的数,再从begin位置向后找第一个大于基准值的数,找到后,两数进行交换,重复如此,直到end和begin相遇,再交换end与begin相遇的值和基准值,此时,一趟快速排序便结束了,基准值也就找到了自己合适的位置,基准值的左右两边又是新的无序序列,这时只需要递归的进行快速排序即可,便于理解,上图
比如这个无序数列,我们选定28为基准值,则begin和end的位置如上图,此刻我们开始进行霍尔划分如下图
我们从后向前找到一个小于28的数是5,再从前向后找第一个大于28的数是32,所以我们交换这两个数。继续寻找满足要求的两个数交换,如下
同样的2和60也满足条件我们交换后如上图下方所示。这时我们继续使end向前找,发现begin和end重合,那这时我们便将基准值和该值交换,如下图
我们这时可以发现,基准值即28的左边全部是小于28的数,它的右边全部是大于它的数,此时一趟快速排序便结束了,只需要对左右两边递归进行快速排序即可。<