CPP   69
quicksort
Guest on 11th February 2023 01:20:37 AM


  1. #include<stdio.h>
  2. int num[1100];
  3. int num2[1100];
  4. int num3[1100];
  5. void quicksort(int left,int right){
  6.     int i,j,p,temp;
  7.     if(left<right){
  8.         p=(left+right)/2;
  9.         i=left-1;
  10.         j=right+1;
  11.         while(i<j){
  12.             while(num[++i]*num2[p]<num[p]*num2[i]&&i<j);
  13.             while(num[--j]*num2[p]>num[p]*num2[j]&&i<j);
  14.             if(i<j){
  15.  
  16.                                 if((num[i]*num2[j]!=num[j]*num2[i])||(num[i]*num2[j]==num[j]*num2[i]&&num3[i]>num3[j])){
  17.                     temp=num[i];
  18.                     num[i]=num[j];
  19.                     num[j]=temp;
  20.                     temp=num2[i];
  21.                     num2[i]=num2[j];
  22.                     num2[j]=temp;
  23.                     temp=num3[i];
  24.                     num3[i]=num3[j];
  25.                     num3[j]=temp;
  26.                 }
  27.  
  28.             }
  29.         }
  30.         quicksort(left,i-1);
  31.         quicksort(j+1,right);
  32.     }
  33. }
  34. int main(void){
  35.     int n;
  36.     int m,i,j;
  37.     scanf("%d",&n);
  38.     while(n--){
  39.         scanf("%d",&m);
  40.         for(i=0;i<m;i++){
  41.             scanf("%d %d",&num[i],&num2[i]);
  42.             num3[i]=i+1;
  43.         }
  44.         quicksort(0,m-1);
  45.         for(i=0;i<m;i++){
  46.             printf("%d ",num3[i]);
  47.         }
  48.         printf("\n");
  49.     }
  50.  
  51.  
  52.     getchar();
  53.     return 0;
  54. }

Raw Paste

Login or Register to edit or fork this paste. It's free.