sorting - 删除 Lomuto 分区的最终交换
问题描述
为什么我们不能仅仅通过这个修改来避免 lomuto 分区中的最终交换语句?
int pivot=arr[h];
int i=l-1;
for(int j=l;j<=h;j++){
if(arr[j]<=pivot){
i++;
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
return i;
我的代码正确吗?
解决方案
这是对的!。排序有稳定排序和不稳定排序两种。快速排序是一种不稳定的排序,因为在快速排序的分区过程中元素的相对位置会发生变化。如果我们使用以下代码(<=),如果我们使用您的代码,则保持元素相对位置的效率会有所提高。
int pivot=arr[h];
int i=l-1;
for(int j=l;j<=h;j++){
if(arr[j]<=pivot){
i++;
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
return i;
}
推荐阅读
- python - 列表和数组在存储值时有何不同?
- android - 为 android 转换旧的佳能 avi 视频
- html - 网站在运行相同浏览器的不同计算机上看起来不同
- reactjs - 如何在 creat-react-app 的 public/index.html 内的元标记中添加环境变量?
- google-sheets - 谷歌表格分层子类别扩展
- git - Docker 命令在 ARM 上失败
- android - Kotlin - 如何更改语言环境
- python - 冻结/推理模型的 get_collection 等价物是什么?
- javascript - 有没有办法更新数据表上选定的行数据?
- postgresql - 在 localDB 上恢复备份失败(退出代码:1)