书接上文,上次讲到了双路快速排序,双路快速排序是将等于v(标志数)的数也进行交换,从而避免了在处理有大量重复数据的数组分组时的不平衡。而三路快速排序则是将等于v的数也分成一组,同样可以解决上述问题。其原理如下:
1、采用随机排序的方法将某个数作为分割数,放在数组开头,该数定义为v。将小于v的一段数组开头的数索引定义为lt,将需要遍历的数组的索引定义为i,将小于v的一段数组的索引定义为gt,数组的开头和结尾的索引分别为l和r。原理图如下:
2、对索引i进行维护,逐个比较索引i对应的数与v的关系。如果arr[i]<v,那么将arr[i]和arr[lt+1]交换,之后将索引i和lt分别向后移动一位。如下图蓝色的e和灰绿色的那块相交换,
三路快速排序算法原理 C/C++
最新推荐文章于 2022-03-11 11:18:10 发布