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

Sắp xếp lại một mảng sao cho mọi phần tử được lập chỉ mục lẻ đều lớn hơn phần tử trước đó trong C ++

Chúng ta được cung cấp một mảng kiểu số nguyên dương, giả sử, arr [] có kích thước bất kỳ. Nhiệm vụ là sắp xếp lại một mảng theo cách mà tất cả các phần tử có ở chỉ số lẻ phải có giá trị lớn hơn phần tử có ở chỉ số chẵn và in kết quả.

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 [] ={2, 1, 5, 4, 3, 7, 8}

Đầu ra - Mảng trước Sắp xếp:2 1 5 4 3 7 8 Sắp xếp lại một mảng sao cho mọi phần tử lẻ được lập chỉ mục đều lớn hơn nó trước đó là:1 4 2 5 3 8 7

Giải thích - chúng ta được cung cấp một mảng số nguyên có kích thước 7. Bây giờ, chúng ta sẽ hoán đổi các phần tử ở chỉ số chẵn với các phần tử ở chỉ số lẻ nếu các phần tử được lập chỉ mục chẵn lớn hơn, tức là

Arr[0] > arr[1] = call swap = {1, 2, 5, 4, 3, 7, 8}
Arr[2] > arr[3] = call swap = {1, 2, 4, 5, 3, 7, 8}
Arr[6] > arr[5] = call swap = {1, 2, 4, 5, 3, 8, 7}
Arr[2] > arr[1] = call swap = {1, 4, 2, 5, 3, 8, 7}

Đầu vào - int arr [] ={3, 2, 6, 9}

Đầu ra - Mảng trước khi sắp xếp:3 2 6 9 Sắp xếp lại một mảng sao cho mọi phần tử lẻ được lập chỉ mục đều lớn hơn nó trước đó là:2 3 6 9

Giải thích - chúng ta được cung cấp một mảng số nguyên có kích thước là 4. Bây giờ, chúng ta sẽ hoán đổi các phần tử ở chỉ số chẵn với các phần tử ở chỉ số lẻ nếu các phần tử được lập chỉ mục chẵn lớn hơn, tức là Arr [0]> arr [1] =call swap ={2, 3, 6, 9}. Không cần gọi thêm phương thức hoán đổi vì tất cả các phần tử tại các vị trí đều thỏa mãn các điều kiện

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.

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

  • Bên trong chức năng Sắp xếp lại (arr, size)

    • Tạo một biến kiểu số nguyên, giả sử là ptr và đặt nó bằng size-1.

    • Bắt đầu vòng lặp FOR, từ i đến 0 cho đến khi tôi nhỏ hơn ptr và i =i + 1. Trong vòng lặp, hãy kiểm tra xem arr [i] có lớn hơn arr [i + 1] hay không rồi gọi swap (arr [i], arr [ i + 1]).

    • Kiểm tra kích thước IF &1 sau đó bắt đầu vòng lặp FOR từ i đến ptr cho đến khi tôi lớn hơn 0 và i =i - 2. Bên trong vòng lặp, kiểm tra IF arr [i] lớn hơn arr [i - 1] rồi gọi swap (arr [i ], arr [i-1])

  • In mảng sau khi sắp xếp lại các giá trị của một mảng.

Ví dụ

#include <iostream>
using namespace std;
void Rearrangement(int arr[], int size){
   int ptr = size - 1;
   for(int i = 0; i < ptr; i = i+2){
      if(arr[i] > arr[i+1]){
         swap(arr[i], arr[i+1]);
      }
   }
   if(size & 1){
      for(int i = ptr; i > 0; i = i-2){
         if(arr[i] > arr[i-1]){
            swap(arr[i], arr[i-1]);
         }
      }
   }
}
int main(){
   //input an array
   int arr[] = {2, 1, 5, 4, 3, 7, 8};
   int size = sizeof(arr) / sizeof(arr[0]);
   //print the original Array
   cout<<"Array before Arrangement: ";
   for (int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"\nRearrangement of an array such that every odd indexed element is greater than it previous 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 1 5 4 3 7 8
Rearrangement of an array such that every odd indexed element is greater than it previous is: 1 4 2 5 3 8 7