複習下一些基本算法
#include<bits/stdc++.h>
using namespace std;
int quick_sort(vector<int> &v, int l, int r, int k){
if(l<r){
int target = v[l];
int tmp_l = l, tmp_r = r;
while(tmp_l < tmp_r){
while(tmp_l < tmp_r && v[tmp_r] >= target) tmp_r--;
if(tmp_l < tmp_r) v[tmp_l++] = v[tmp_r];
while(tmp_l < tmp_r && v[tmp_l] < target) tmp_l++;
if(tmp_l < tmp_r) v[tmp_r--] = v[tmp_l];
}
v[tmp_l]=target;
//cout << tmp_l << " " << v[tmp_l] << endl;
if(tmp_l == k) return v[tmp_l];
else if(tmp_l > k) return quick_sort(v, l, tmp_l-1, k);
else return quick_sort(v, tmp_l+1, r, k);
}
}
int main()
{
priority_queue<int, vector<int> , greater<int> > pq;
vector<int> v;
string str;
cin >> str;
stringstream ss;
ss.str(str);
char ch;
ss >> ch;
int k = 3;
while(!ss.eof()){
int num;
ss >> num;
v.push_back(num);
ss >> ch;
if(ch == ']') break;
}
//堆排序
/*for(int i=0; i < v.size(); i++){
pq.push(v[i]);
while(pq.size()>k){
//cout << pq.top() << endl;
pq.pop();
}
}
cout << pq.top() << endl;*/
//快排
cout << quick_sort(v, 0, v.size()-1, v.size()-k) << endl;
}
輸入:[1,2,3,4,5]
輸出:3
輸入:[1,1,2,2,3]
輸出:2
輸入:[6,5,4,4,1,2]
輸出:4