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

Sắp xếp lại các số dương và số âm với khoảng trống thừa không đổi trong C ++

Chúng ta được cung cấp một mảng kiểu số nguyên chứa cả số dương và số âm, 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ủa mảng được sắp xếp bằng cách sử dụng hàm sắp xếp có sẵn của C ++ STL cũng như sử dụng đệ quy để mã hóa 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 [] ={4, 2, -1, -1, 6, -3, 0}

Đầu ra - Sắp xếp lại các số dương và số âm với dấu cách thừa không đổi là:-3 -1 -1 0 6 2 4.

Giải thích - chúng ta được cho một mảng số nguyên có kích thước 7 chứa cả phần tử dương và âm. Bây giờ, chúng ta sẽ sắp xếp lại mảng theo cách mà tất cả các phần tử của mảng được sắp xếp trong khoảng trống thừa không đổi và kết quả cuối cùng sẽ là -3 -1 -1 0 2 4 6.

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

Đầu ra - Sắp xếp lại các số dương và số âm với dấu cách thừa không đổi là:-9 -10 2 3 10 5 8 4

Giải thích - chúng ta được cho một mảng số nguyên có kích thước là 8 chứa cả phần tử dương và âm. Bây giờ, chúng ta sẽ sắp xếp lại mảng theo cách mà tất cả các phần tử của mảng được sắp xếp trong khoảng trống thừa không đổi và kết quả cuối cùng sẽ là -9 -10 2 3 10 5 8 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.

  • In một mảng trước khi thực hiện hành động sắp xếp lại bằng vòng lặp FOR.

  • Gọi đến hàm Sắp xếp lại (arr, size) bằng cách chuyển mảng và kích thước của mảng dưới dạng tham số.

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

    • Khai báo một biến kiểu số nguyên là i thành 0 và j là kích thước -1.

    • Bắt đầu trong khi (đúng). Bên trong while, bắt đầu một vòng lặp khác khi arr [i] nhỏ hơn 0 VÀ i nhỏ hơn kích thước rồi tăng i lên 1.

    • Bắt đầu WHILE arr [j] lớn hơn 0 VÀ j lớn hơn 0 sau đó giảm j đi 1.

    • Kiểm tra NẾU i nhỏ hơn j rồi đặt nhiệt độ thành arr [i], arr [i] thành arr [j] và arr [j] thành tạm thời.

    • ELSE, nghỉ.

  • In kết quả.

Ví dụ

#include<iostream>
using namespace std;
void Rearrangement(int arr[], int size){
   int i = 0;
   int j = size - 1;
   while(true){
      while(arr[i] < 0 && i < size){
         i++;
      }
      while(arr[j] > 0 && j >= 0){
         j--;
      }
      if (i < j){
         int temp = arr[i];
         arr[i] = arr[j];
         arr[j] = temp;
      }
      else{
         break;
      }
   }
}
int main(){
   int arr[] = {4, 2, -1, -1, 6, -3, 0};
   int size = sizeof(arr)/sizeof(arr[0]);
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"Rearrangement of positive and negative numbers with constant extra space 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

Rearrangement of positive and negative numbers with constant extra space is: -3 -1 -1 0 6 2 4