Advertisement
Lisaveta777

80% Sort by heaviest row

Dec 1st, 2018
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.87 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define SIZE 5
  4. //uporjadochit stroki massiva po vozrastaniju summy ix elementov
  5. //prichesat
  6. //dobavit raznye varianty: po ubyvaniju summy elementov, chto eshe mozhno pridumat?
  7.  
  8. void pop_arr(int s,int a[s][s]);
  9. void pr_arr(int s,int a[s][s]);
  10. void calc_row(int s,int a[s][s],int m[s]);//
  11. void sort_arr(int s,int a[s][s],int m[s]);//m[s] to be deleted, used different approach
  12. void swap_2_rows(int s,int a[s][s],int r1,int r2);
  13. int  heaviest_row(int s,int sta_row,int fin_row,int a[s][s]);
  14. int main()
  15. {
  16.     int min[SIZE],arr [SIZE][SIZE]={3,3,3,3,3, 2,2,2,2,2,  5,5,5,5,5,  1,1,1,1,1, 4,4,4,4,4};
  17.     //pop_arr(SIZE,arr);
  18.     pr_arr(SIZE,arr);
  19.     //calc_row(SIZE,arr,min);
  20.     sort_arr(SIZE,arr,min);
  21.     pr_arr(SIZE,arr);
  22.  
  23.     return 0;
  24. }
  25. void pop_arr(int s,int a[s][s])
  26. {
  27.    int i,j;
  28.    for(i=0;i<s;i++)
  29.    {
  30.        for(j=0;j<s;j++)
  31.           a[i][j]=rand()%20;
  32.    }
  33. }
  34. void pr_arr(int s,int a[s][s])
  35. {
  36.     int i,j;
  37.     for(i=0;i<s;i++)
  38.     {
  39.         for(j=0;j<s;j++)
  40.         {printf("%d\t",a[i][j]);}
  41.         printf("\n");
  42.     }
  43. }
  44. void calc_row(int s,int a[s][s],int summa[s])
  45. {
  46.     int i,j,summ,index=0;//biggest summ in row index
  47.     for(i=0;i<s;i++)
  48.     {
  49.         summ=0;
  50.         for(j=0;j<s;j++)//puts summ for each row into array summa
  51.             summ+=a[i][j];
  52.         summa[i]=summ;
  53.     }
  54.     for(i=0;i<s;i++)//prins summ for each row
  55.         printf("summ - %d\n",summa[i]);
  56.  
  57.     for(i=0;i<s;i++)//finds row with the biggest summ for it(which row is the heaviest?)
  58.         index =(summa[i]>summa[index])? i:index;
  59.     printf("index is %d,summ is %d\t",index,summa[index]);
  60. }
  61. void sort_arr(int s,int a[s][s],int summa[s])
  62. {
  63.     int i,j,heav_index,summ,temp[s];
  64.     for(i=0;i<s;i++)
  65.     {
  66.        // printf("heaviest row %d\n",heaviest_row(s,0,s,a));
  67.        heav_index = heaviest_row(s,0,s-i,a);//put heaviest row last!
  68.        printf("\n\ndiaposone %d to %d,heaviest ros %d\n",i,s-i,heav_index);
  69.        //swaps rows: heav_index & s-i-1
  70.        swap_2_rows(s,a,heav_index,s-i-1);
  71.     }
  72.     //swap row max_index & row s-i-1
  73. }
  74.  
  75. int heaviest_row(int s,int sta_row,int fin_row,int a[s][s])
  76. {
  77.     int i,j,summ,max_summ,max_index;
  78.     max_index= max_summ = 0;
  79.     for(i=sta_row;i<fin_row;i++)//i-row
  80.     {
  81.         summ=0;
  82.         for(j=0;j<s;j++)//summarasing the whole row
  83.         {
  84.             summ+=a[i][j];
  85.         }
  86.         if(summ>max_summ)
  87.         {
  88.             max_index = i;
  89.             max_summ = summ;
  90.         }
  91.     }//end of i cycle
  92.     return max_index;
  93. }
  94. void swap_2_rows(int s,int a[s][s],int ind_r1,int ind_r2)
  95. {
  96.     int i,j,temp;
  97.     printf("inside swap r1 %d, r2 %d\n",ind_r1,ind_r2);
  98.     for(j=0;j<s;j++)
  99.     {
  100.         temp = a[ind_r1][j];
  101.         a[ind_r1][j]=a[ind_r2][j];
  102.         a[ind_r2][j]= temp;
  103.     }
  104.     printf("\nInside swap new array is:\n");
  105.     pr_arr(s,a);
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement