算法:螺丝螺母问题

给你一堆螺母和螺帽,每个螺母都有一个相对应的螺帽,但是他们之间的对应关系已经打乱。你可以比较螺母和螺帽的大小关系,但是你无法比较螺母和螺母的大小关系,你也无法比较螺帽和螺帽的大小关系。设计一个算法,找出螺母和螺帽的对应关系。

#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;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值