面试常见题,荷兰三色国旗问题
挺有意思的
#include<bits/stdc++.h>
using namespace std;
int main(){vector<int>str={2, 3, 1, 9, 7, 6, 1, 4, 5,4};int n=str.size();int target=4;int l=-1,r=n;int p=0;//这里不能是l<r哦,p代表数组遍历指针,当它与后面的r指针相遇时说明//当前已经排序完成,这时l可能还在p的前面while(p<r) {if (str[p] < target) {swap(str[++l], str[p++]);} else if (str[p] > target) {//这里p不进行增加,因为还要将换过来的数再进行大小判断swap(str[p], str[--r]);}else{p++;}}for(int i=0;i<n;i++){cout<<str[i]<<endl;}return 0;
}