Сортування 2D вектора в C ++ | Встановіть 2 (у порядку зменшення за рядком та стовпцем)

Ми обговорили деякі випадки сортування 2D вектора в нижче наборі 1. Сортування 2D вектора в C ++ | Встановіть 1 (за рядком і стовпцем) У цій статті обговорюється більше випадків Випадок 3: Сортувати певний ряд 2D вектора у порядку зменшення Цей тип сортування влаштовує вибраний ряд 2D вектора в порядку зменшення. Це досягається за допомогою Sort () та передачі ітераторів 1D вектора як його аргументів. 

CPP
   // C++ code to demonstrate sorting of a   // row of 2D vector in descending order   #include     #include    // for 2D vector   #include     // for sort()   using     namespace     std  ;       int     main  ()   {      // Initializing 2D vector 'vect' with      // values      vector  &  lt  ;     vector  &  lt  ;  int  &  gt  ;     &  gt  ;     vect  {{  3       5       1  }      {  4       8       6  }      {  7       2       9  }};      // Number of rows;      int     m     =     vect  .  size  ();          // Number of columns (Assuming all rows      // are of same size). We can have different      // sizes though (like Java).      int     n     =     vect  [  0  ].  size  ();          // Displaying the 2D vector before sorting      cout     &  lt  ;  &  lt  ;     &  quot  ;  The     Matrix     before     sorting     1  st     row     is  :    n  &  quot  ;;      for     (  int     i  =  0  ;     i  &  lt  ;  m  ;     i  ++  )      {      for     (  int     j  =  0  ;     j  &  lt  ;  n     ;  j  ++  )      cout     &  lt  ;  &  lt  ;     vect  [  i  ][  j  ]     &  lt  ;  &  lt  ;     &  quot  ;     &  quot  ;;      cout     &  lt  ;  &  lt  ;     endl  ;      }          // Use of 'sort()' for sorting first row      sort  (  vect  [  0  ].  rbegin  ()     vect  [  0  ].  rend  ());          // Displaying the 2D vector after sorting      cout     &  lt  ;  &  lt  ;     &  quot  ;  The     Matrix     after     sorting     1  st     row     is  :    n  &  quot  ;;      for     (  int     i  =  0  ;     i  &  lt  ;  m  ;     i  ++  )      {      for     (  int     j  =  0  ;     j  &  lt  ;  n     ;  j  ++  )      cout     &  lt  ;  &  lt  ;     vect  [  i  ][  j  ]     &  lt  ;  &  lt  ;     &  quot  ;     &  quot  ;;      cout     &  lt  ;  &  lt  ;     endl  ;      }          return     0  ;   }   

Вихід:

The Matrix before sorting 1st row is: 3 5 1 4 8 6 7 2 9 The Matrix after sorting 1st row is: 5 3 1 4 8 6 7 2 9  

З Складність часу цього алгоритму є O (n log n), де n - розмір вектора. 

З космічна складність цього алгоритму є O (1), оскільки додаткового місця не використовується.


Випадок 4: Сортувати весь 2D вектор на основі певного стовпця в порядку зменшення. У цьому типі сортування 2D вектора повністю відсортований на основі обраного стовпця в порядку зменшення. Наприклад, якщо обраний стовпчик є другим, рядок з найбільшим значенням у другому стовпці стає першим рядом другого найбільшого значення у другому стовпці стає другим рядком і так далі. {3 5 1} {4 8 6} {7 2 9}; Після сортування цієї матриці за другим стовпцем ми отримуємо {4 8 6} // рядок з найбільшим значенням у другому стовпці {3 5 1} // рядок із другим найбільшим значенням у другому стовпці {7 2 9} Це досягається шляхом передачі третього аргументу за сортом () як заклик до визначеної користувача явної функції. 

CPP
   // C++ code to demonstrate sorting of a   // 2D vector on basis of a column in   // descending order   #include     #include    // for 2D vector   #include     // for sort()   using     namespace     std  ;       // Driver function to sort the 2D vector   // on basis of a particular column in    // descending order   bool     sortcol  (     const     vector  &  lt  ;  int  &  gt  ;  &  amp  ;     v1        const     vector  &  lt  ;  int  &  gt  ;  &  amp  ;     v2     )     {      return     v1  [  1  ]     &  gt  ;     v2  [  1  ];   }       int     main  ()   {      // Initializing 2D vector 'vect' with      // values      vector  &  lt  ;     vector  &  lt  ;  int  &  gt  ;     &  gt  ;     vect  {{  3       5       1  }      {  4       8       6  }      {  7       2       9  }};          // Number of rows;      int     m     =     vect  .  size  ();          // Number of columns (Assuming all rows      // are of same size). We can have different      // sizes though (like Java).      int     n     =     vect  [  0  ].  size  ();          // Displaying the 2D vector before sorting      cout     &  lt  ;  &  lt  ;     &  quot  ;  The     Matrix     before     sorting     is  :    n  &  quot  ;;      for     (  int     i  =  0  ;     i  &  lt  ;  m  ;     i  ++  )      {      for     (  int     j  =  0  ;     j  &  lt  ;  n     ;  j  ++  )      cout     &  lt  ;  &  lt  ;     vect  [  i  ][  j  ]     &  lt  ;  &  lt  ;     &  quot  ;     &  quot  ;;      cout     &  lt  ;  &  lt  ;     endl  ;      }             // Use of 'sort()' for sorting on basis      // of 2nd column in descending order      sort  (  vect  .  begin  ()     vect  .  end  ()  sortcol  );          // Displaying the 2D vector after sorting      cout     &  lt  ;  &  lt  ;     &  quot  ;  The     Matrix     after     sorting     is  :    n  &  quot  ;;      for     (  int     i  =  0  ;     i  &  lt  ;  m  ;     i  ++  )      {      for     (  int     j  =  0  ;     j  &  lt  ;  n     ;  j  ++  )      cout     &  lt  ;  &  lt  ;     vect  [  i  ][  j  ]     &  lt  ;  &  lt  ;     &  quot  ;     &  quot  ;;      cout     &  lt  ;  &  lt  ;     endl  ;      }      return     0  ;   }   

Вихід:

The Matrix before sorting is: 3 5 1 4 8 6 7 2 9 The Matrix after sorting is: 4 8 6 3 5 1 7 2 9  

З Складність часу цього алгоритму є O (nlogn) де N - кількість елементів у 2D векторі. Це пов’язано з використанням функції Sort (), яка працює в час O (nlogn).

З космічна складність цього алгоритму є O (1) Оскільки додаткових структур даних не використовується.