top1编程
← 返回题目
题解

快速排序

2 条题解

  • 0
    @ 2026-7-29 2:10:47
    #include<bits/stdc++.h>
    using namespace std;
    struct xs{
    	int yw,sx,yy,zf;
    	int xh;
    }a[310],x;
    void ks(int z,int y){
    	int i=z,j=y;
    	x=a[z];
    	if(z>=y){
    		return ;
    	}
    	while(i!=j){
    		while(i<j&&(a[j].zf<=x.zf||a[j].zf==x.zf&&a[j].yw<x.yw||a[j].yw==x.yw&&a[j].xh>x.xh)){
    			j--;
    		}
    		while(i<j&&(a[i].zf>=x.zf||a[i].zf==x.zf&&a[i].yw>x.yw||a[i].yw==x.yw&&a[i].xh<x.xh)){
    			i++;
    		}
    		if(i<j){
    			swap(a[i],a[j]);
    		}
    	}
    	a[z]=a[i];
    	a[i]=x;
    	ks(z,i-1);
    	ks(i+1,y);
    }
    int main(){
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i].yw>>a[i].sx>>a[i].yy;
    		a[i].zf=a[i].yw+a[i].sx+a[i].yy;
    		a[i].xh=i;
    	}
    	ks(1,n);
    	for(int i=1;i<=5;i++){
    		cout<<a[i].xh<<" "<<a[i].zf<<endl;
    	}
    	return 0;
    }
    
    • 0
      @ 2026-7-29 1:48:58
      #include<bits/stdc++.h>
      using namespace std;
      struct xs{
      	int yw,sx,yy,zf;
      	int xh;
      }a[310],x;
      void ks(int z,int y){
      	int i=z,j=y;
      	x=a[z];
      	if(z>=y){
      		return ;
      	}
      	while(i!=j){
      		while(i<j&&(a[j].zf<=x.zf||a[j].zf==x.zf&&a[j].yw<x.yw||a[j].yw==x.yw&&a[j].xh>x.xh)){
      			j--;
      		}
      		while(i<j&&(a[i].zf>=x.zf||a[i].zf==x.zf&&a[i].yw>x.yw||a[i].yw==x.yw&&a[i].xh<x.xh)){
      			i++;
      		}
      		if(i<j){
      			swap(a[i],a[j]);
      		}
      	}
      	a[z]=a[i];
      	a[i]=x;
      	ks(z,i-1);
      	ks(i+1,y);
      }
      int main(){
      	int n;
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>a[i].yw>>a[i].sx>>a[i].yy;
      		a[i].zf=a[i].yw+a[i].sx+a[i].yy;
      		a[i].xh=i;
      	}
      	ks(1,n);
      	for(int i=1;i<=5;i++){
      		cout<<a[i].xh<<" "<<a[i].zf<<endl;
      	}
      	return 0;
      }
      
      • 1