Computer >> Máy Tính >  >> Lập trình >> C ++

Sắp xếp lại một mảng theo thứ tự - Nhỏ nhất, Lớn nhất, Nhỏ nhất thứ 2, Lớn nhất thứ 2,. Sử dụng C ++

Chúng tôi được cung cấp một mảng; chúng ta cần sắp xếp mảng này theo thứ tự mà phần tử đầu tiên phải là phần tử tối thiểu, phần tử thứ hai phải là phần tử tối đa, phần tử thứ ba phải là phần tử tối thiểu thứ 2, phần tử thứ 4 phải là phần tử tối đa thứ 2, v.v. ví dụ -

Input : arr[ ] = { 13, 34, 30, 56, 78, 3 }
Output : { 3, 78, 13, 56, 34, 30 }
Explanation : array is rearranged in the order { 1st min, 1st max, 2nd min, 2nd max, 3rd min, 3rd max }

Input : arr [ ] = { 2, 4, 6, 8, 11, 13, 15 }
Output : { 2, 15, 4, 13, 6, 11, 8 }

Phương pháp tiếp cận để tìm ra giải pháp

Vấn đề này có thể được giải quyết bằng cách sử dụng hai biến, ' x 's và' y 'nơi chúng sẽ trỏ đến phần tử tối đa và tối thiểu, Nhưng đối với mảng đó nên được sắp xếp, vì vậy chúng ta cần sắp xếp mảng trước, Sau đó tạo một mảng trống mới có cùng kích thước để lưu trữ mảng đã được sắp xếp lại. Bây giờ hãy lặp lại trên mảng và nếu phần tử lặp ở chỉ số chẵn, thì thêm phần tử arr [x] vào mảng trống và tăng x lên 1. Nếu phần tử ở chỉ số lẻ, thì hãy thêm phần tử arr [y] vào mảng trống và giảm y đi 1. Làm điều này cho đến khi y trở nên nhỏ hơn x.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int main () {
   int arr[] = { 2, 4, 6, 8, 11, 13, 15 };
   int n = sizeof (arr) / sizeof (arr[0]);

   // creating a new array to store the rearranged array.
   int reordered_array[n];

   // sorting the original array
   sort(arr, arr + n);

   // pointing variables to minimum and maximum element index.
   int x = 0, y = n - 1;
   int i = 0;

   // iterating over the array until max is less than or equals to max.
   while (x <= y) {
   // if i is even then store max index element

      if (i % 2 == 0) {
         reordered_array[i] = arr[x];
         x++;
      }
      // store min index element
      else {
         reordered_array[i] = arr[y];
         y--;
      }
      i++;
   }
   // printing the reordered array.
   for (int i = 0; i < n; i++)
      cout << reordered_array[i] << " ";

   // or we can update the original array
   // for (int i = 0; i < n; i++)
   // arr[i] = reordered_array[i];
   return 0;
}

Đầu ra

2 15 4 13 6 11 8

Giải thích về đoạn mã trên

  • Các biến được khởi tạo là x =0 và y =array_length (n) - 1 .
  • while (x <=y) duyệt qua mảng cho đến khi x lớn hơn y.
  • Nếu số lượng là chẵn (x), phần tử sẽ được thêm vào mảng cuối cùng và biến x được tăng thêm 1.
  • Nếu tôi là số lẻ, thì (y) phần tử sẽ được thêm vào mảng cuối cùng và biến y giảm đi 1.
  • Cuối cùng, mảng được sắp xếp lại được lưu trữ trong mảng_array [] được sắp xếp lại.

Kết luận

Trong bài này, chúng ta đã thảo luận về giải pháp sắp xếp lại mảng đã cho ở dạng nhỏ nhất, lớn nhất. Chúng tôi cũng viết một chương trình C ++ tương tự. Tương tự, chúng ta có thể viết chương trình này bằng bất kỳ ngôn ngữ nào khác như C, Java, Python, v.v. Chúng tôi hy vọng bạn thấy bài viết này hữu ích.