企业名称查询网站汽车网站更新怎么做
web/
2025/10/5 17:23:38/
文章来源:
企业名称查询网站,汽车网站更新怎么做,网站icp备案号怎么查询,wordpress备份恢复阿里云目录
挖坑版
基本思路
代码实现 注意点
前后指针版
基本思路
代码实现
注意点 由于hoare版本的快速排序有很多坑和需要注意的地方#xff0c;就会导致代码写起来不容易#xff0c;这里我们给出两种不同的单趟排序思路#xff1a;挖坑版#xff06;前后指针版。
挖坑…目录
挖坑版
基本思路
代码实现 注意点
前后指针版
基本思路
代码实现
注意点 由于hoare版本的快速排序有很多坑和需要注意的地方就会导致代码写起来不容易这里我们给出两种不同的单趟排序思路挖坑版前后指针版。
挖坑版
基本思路 先将第一个数记作key然后把它当作一个坑位。右边先走找小找到后填补到坑位上然后该位置变成新的坑位。接着左边走找大找到后再将该数填到坑位上该位置变成新坑位。如此循环往复直到二人相遇再把key填补到相遇点。 如下为图解 代码实现
注意holei是下标
// 挖坑法
int PartSort2(int* a, int begin, int end)
{int midi GetMidi(a, begin, end);Swap(a[midi], a[begin]);int key a[begin];int holei begin;while (begin end){// 右边找小填到左边的坑while (begin end a[end] key){--end;}a[holei] a[end];holei end;// 左边找大填到右边的坑while (begin end a[begin] key){begin;}a[holei] a[begin];holei begin;}a[holei] key;return holei;
} 注意点
holei是下标key是最左边的值则right先走key是最右边的值则left先走要记得将坑位转移时间复杂度O(N)
该方法本质上还是hoare的思想在性能上并没有比hoare好但是更好理解 前后指针版
基本思路 首元素为key设置两个指针cur和prevprev指向第一个元素cur指向它的下一个元素。 cur找大比key值大的值curcur找到比key值小的值prev交换prev和cur位置的值cur 关于交换 prev可能会和cur指向同一个值这个时候他们两个还没有分开。当二者拉开距离prev就会和远处的cur交换值了。此时的prev就是比key要大的值因为cur在之前已经过滤掉了这些数从而达到小值换到前面大值换到后面的效果。 如下图解 我们可以看出这就类似于推箱子遇到比key小的值了后一直将7和9往后退将小的那个值往前推。
代码实现
//前后指针
int PartSort3(int* a, int begin, int end)
{int midi GetMidi(a, begin, end);Swap(a[midi], a[begin]);int keyi begin;int prev begin;int cur prev 1;while (cur end){if (a[cur] a[keyi] prev ! cur)Swap(a[prev], a[cur]);cur;}Swap(a[prev], a[keyi]);keyi prev;return keyi;
}
注意点
如果prevcur的话那就是自己和自己交换那么在这里是没有必要的我们可以直接让cur即可所以我们将它归并到else里。keyi是下标注意结束条件curend要加等号因为当curend的时候还要判断。只有当它越界的时候才跳出循环。时间复杂度O(N)
这三种方法单趟排序出来的结果都不一样注意区分。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87475.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!