划分之后,数组会根据mid划分为3部分,分别是<,=,>的关系,而不是传统的<=,>或者是<,>=的二划分关系。
这里的思路就是xxxx
感觉自己对i,j,k的几何关系还描述的不是很好。
建议用数组{5,5,1,2,3,5,6,7,8}和{1,2,3,4,5,5,6,7,5}来模拟一下。
void three_way_partition(vector<int>& nums,int mid){int i = 0, j = 0, k = nums.size() - 1; while(j < k){ if(nums[j] > mid){ swap(nums[j], nums[k]); --k; } else if(nums[j] < mid){ swap(nums[j], nums[i]); ++i; ++j; } else{ ++j; } }
}