给你一堆螺母和螺帽,每个螺母都有一个相对应的螺帽,但是他们之间的对应关系已经打乱。你可以比较螺母和螺帽的大小关系,但是你无法比较螺母和螺母的大小关系,你也无法比较螺帽和螺帽的大小关系。设计一个算法,找出螺母和螺帽的对应关系。
#include<iostream>
#include<vector>
using namespace std;
void quicksort(vector<int>& a, vector<int>& b, int left, int right){
int mark, count=0;
for(int i=left; i<=right; ++i){
if(b[i]==a[left]) mark = i;
else if(b[i]<a[left]) ++count;
}
swap(a[left], a[left+count]);
swap(b[mark], b[left+count]);
mark = left + count;
int i=left, j=right;
while(i<mark && j>mark){
while(i<mark && a[i]<b[mark]) ++i;
while(j>mark && a[j]>b[mark]) --j;
if(i<j) swap(a[i++], a[j--]);
}
i=left, j=right;
while(i<mark && j>mark){
while(i<mark && b[i] < a[mark]) ++i;
while(j>mark && b[j] > a[mark]) --j;
if(i<j) swap(b[i++], b[j--]);
}
cout<<a[mark]<<" "<<b[mark]<<endl;
if(left<mark) quicksort(a, b, left, mark-1);
if(right>mark) quicksort(a, b, mark+1, right);
}
int main(){
vector<int> arr1 = {3,5,6,1,2,4};
vector<int> arr2 = {6,4,2,3,5,1};
quicksort(arr1, arr2, 0, arr1.size()-1);
for(auto a : arr1) cout<<a<<" ";
cout<<endl;
for(auto a : arr2) cout<<a<<" ";
return 0;
}