数据结构——三路划分(快排优化)

编程入门 行业动态 更新时间:2024-10-15 12:32:02

<a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构——三路划分(快排优化)"/>

数据结构——三路划分(快排优化)

刷Leetcode时遇到的问题,用普通的快排去跑,发现有问题。

 普通的Hoare或者其他的快排好像都没有直接解决掉这个问题,当一个数重复出现的时候,用普通的快排效率其实并没有那么高。所以,这也是普通快排的缺点之一。

所以,在一个元素重复出现多次的时候,可以用三路划分来优化快排。

思考一下,为什么当arr[cur] > key的时候,cur不++呢?

这是因为,我们只知道当时在cur位置上的值比key大,而right不知道比key大还是小,所以不用cur++,而right--,是因为在交换后,已经知道肯定比key大了。 

源码如下:

void QuickSork(int arr[],int left,int right)
{if(left >= right)return;int begin = left;int end = right;int cur = left+1;int key = arr[left];while(cur <= right){if(arr[cur] < key){swap(arr[left],arr[cur]);cur++;left++;}else if(arr[cur] > key){swap(arr[cur],arr[right]);--right;}else {++cur;}}QuickSork(arr,begin,left-1);QuickSork(arr,right+1,end);}

更多推荐

数据结构——三路划分(快排优化)

本文发布于:2023-12-05 22:27:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665518.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   三路

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!