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

Chương trình C ++ để sắp xếp lại một mảng ở dạng tối thiểu tối đa

Chúng ta được cung cấp một mảng số nguyên có thể được sắp xếp theo cách có sắp xếp / không được sắp xếp. Nhiệm vụ là đầu tiên sắp xếp mảng nếu các giá trị không được sắp xếp sau đó sắp xếp mảng sao cho phần tử đầu tiên của mảng sẽ là giá trị lớn nhất, thứ hai là giá trị nhỏ nhất, thứ ba sẽ là giá trị lớn thứ hai, thứ tư sẽ là giá trị nhỏ nhất thứ hai, v.v.

Hãy để chúng tôi xem các kịch bản đầu ra đầu vào khác nhau cho việc này -

Đầu vào - int arr [] ={7, 5, 2, 3, 4, 9, 10, 5}

Đầu ra - Mảng đứng trước Sắp xếp:2 3 4 5 5 7 9 10 Sắp xếp lại một mảng ở dạng cực đại cực tiểu là:10 2 9 3 7 4 5 5

Giải thích - ta được một mảng kiểu số nguyên chứa các giá trị là {7, 5, 2, 3, 4, 9, 10, 5}. Đầu tiên, chúng ta sẽ sắp xếp một mảng và nó sẽ là {2 3 4 5 5 7 9 10}. Thứ hai, sắp xếp phần tử lớn nhất tại arr [0] tức là 10 rồi đến phần tử nhỏ nhất tại arr [1] tức là 2 rồi đến phần tử lớn thứ hai tại arr [2] tức là 9, v.v. Mảng kết quả cuối cùng sẽ là 10 2 9 3 7 4 5 5

Đầu vào - int arr [] ={2, 4, 1, 6, 7}

Đầu ra - Mảng trước Sắp xếp:1, 2, 4, 6, 7 Sắp xếp lại một mảng ở dạng tối đa cực tiểu là:7, 1, 6, 2, 4

Giải thích - chúng ta được cung cấp một mảng kiểu số nguyên chứa các giá trị là {2, 4, 1, 6, 7}. Đầu tiên, chúng ta sẽ sắp xếp một mảng và nó sẽ là {1, 2, 4, 6, 7}. Thứ hai, sắp xếp phần tử lớn nhất tại arr [0] tức là 7 rồi đến phần tử nhỏ nhất tại arr [1] tức là 1 rồi đến phần tử lớn thứ hai tại arr [2] tức là 6, v.v. Mảng kết quả cuối cùng sẽ là 7, 1, 6, 2, 4

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập một mảng các phần tử kiểu số nguyên và tính kích thước của một mảng. Gọi phương thức sắp xếp của C ++ STL bằng cách chuyển arr [] và kích thước của một mảng cho hàm dưới dạng một đối số.

  • In mảng trước khi sắp xếp và gọi hàm Rearr_Max_Min (arr, size)

  • Bên trong hàm Rearr_Max_Min (arr, size)

    • Khai báo một biến là max và đặt nó với size - 1 và một biến khác là min và đặt nó bằng 0. Khai báo một biến là max_val và đặt nó bằng arr [size - 1] + 1.

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến khi tôi nhỏ hơn kích thước. Bên trong vòng lặp, hãy kiểm tra IF i% 2 =0, sau đó đặt arr [i] thành arr [i] + (arr [max]% max_val) * max_val và giảm giá trị tối đa đi 1.

    • Ngược lại, đặt arr [i] thành arr [i] + (arr [min]% max_val) * max_val và tăng min lên 1.

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến khi tôi nhỏ hơn kích thước. Trong vòng lặp, đặt arr [i] thành arr [i] / max_val

Ví dụ

#include <bits/stdc++.h>
using namespace std;
void Rearr_Max_Min(int arr[], int size){
   int max = size - 1;
   int min = 0;
   int max_val = arr[size - 1] + 1;
   for (int i = 0; i < size; i++){
      if (i % 2 == 0){
         arr[i] += (arr[max] % max_val) * max_val;
         max--;
      }
      else{
         arr[i] += (arr[min] % max_val) * max_val;
         min++;
      }
   }
   for(int i = 0; i < size; i++){
      arr[i] = arr[i] / max_val;
   }
}
int main(){
   //input an array
      int arr[] = {7, 5, 2, 3, 4, 9, 10, 5 };
      int size = sizeof(arr) / sizeof(arr[0]);
      //sort an array
      sort(arr, arr + size);
      //print the original Array after sorting
      cout<<"Array before Arrangement: ";
      for (int i = 0; i < size; i++){
         cout << arr[i] << " ";
      }
      //calling the function to rearrange the array
      Rearr_Max_Min(arr, size);
      //print the array after rearranging the values
      cout<<"\nRearrangement of an array in maximum minimum form is: ";
      for(int i = 0; i < size; i++){
         cout<< arr[i] << " ";
      }
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

Array before Arrangement: 2 3 4 5 5 7 9 10
Rearrangement of an array in maximum minimum form is: 10 2 9 3 7 4 5 5