快速排序
// 格式化后:
//backward --> forwart <---
inline void moveNumber(vector<int>& nums,int& i,int& j,int baseNum,bool backward)
{
while(i < j && backward ? (nums[i] < baseNum) :(nums[j] > baseNum))
backward ? ++i:--j;
if(i < j)
nums[backward?j:i] = nums[backward?i:j];
}
void sort(vector<int>& nums,int begin,int end)
{
if(begin >= end)
return;
const int baseNum = nums[begin];
int i = begin;
int j = end;
while(i < j)
for(auto state:{false,true})
moveNumber(nums,i,j,baseNum,state);
nums[i] = baseNum;
sort(nums,begin,i - 1);
sort(nums,i+1 ,end);
}
// 默认解法:
void sort(vector<int>& nums,int begin,int end)
{
if(begin >= end)
return;
int baseNum = nums[begin];
int i = begin;
int j = end;
while(i < j)
{
while(i < j && nums[j] > baseNum)
--j;
if(i < j)
nums[i] = nums[j];
while(i < j && nums[i] < baseNum)
++i;
if(i < j)
nums[j] = nums[i];
}
nums[i] = baseNum;
sort(nums,begin,i - 1);
sort(nums,i+1 ,end);
}
文档更新时间: 2022-07-28 09:47 作者:admin