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

Sắp xếp lại các số dương và số âm bằng cách sử dụng hàm sắp xếp có sẵn 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 bằng chức năng sắp xếp có sẵn là:-3 -1 -1 0 2 4 6.

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, tức là tất cả các phần tử âm xuất hiện trước tất cả các phần tử dương 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 bằng chức năng sắp xếp có sẵn là:-10 -9 2 3 4 5 8 10.

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 sắp xếp tất cả các phần tử của mảng, tức là tất cả các phần tử âm xuất hiện trước tất cả các phần tử dương và kết quả cuối cùng sẽ là -10-9 2 3 4 5 8 10.

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

Sử dụng sort ()

  • 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.

  • Truyền dữ liệu vào hàm Sắp xếp lại (int arr [], int size)

  • Bên trong hàm, Sắp xếp lại (int arr [], int size)

    • Gọi hàm sắp xếp của C ++ STL bằng cách chuyển mảng và kích thước của mảng làm tham số cho hàm và nó sẽ trả về mảng đã sắp xếp.

  • In kết quả.

Sử dụng đệ quy

  • 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.

  • Khai báo một biến tạm thời, giả sử, tạm thời.

  • Bắt đầu vòng lặp FOR từ tôi đến cho đến khi tôi nhỏ hơn kích thước của một mảng. Trong vòng lặp, hãy kiểm tra xem arr [i] có nhỏ hơn 0 không rồi tăng nhiệt độ lên 1.

  • Gọi Sắp xếp lại (arr, 0, (size - 1)) bằng cách chuyển mảng, 0 và size -1 làm tham số cho hàm.

  • Gọi hàm xoay bằng cách chuyển mảng, tạm thời và kích thước - 1 vào hàm.

  • Bên trong hàm Sắp xếp lại (int arr [], int first, int last)

    • Kiểm tra IF đầu tiên bằng cuối cùng rồi trả về.

    • Thực hiện cuộc gọi đệ quy tới hàm Rearrangement () và chuyển mảng, phần tử đầu tiên + 1 và phần tử cuối cùng làm tham số.

    • Kiểm tra IF arr [đầu tiên] lớn hơn 0 rồi thực hiện lệnh gọi hàm dưới dạng Xoay (arr, (đầu tiên + 1), cuối cùng) và Xoay (arr, đầu tiên, cuối cùng)

  • Bên trong hàm Rotate (int arr [], int first, int last)

    • Bắt đầu trong khi đầu tiên ít hơn cuối cùng. Bên trong while, khai báo biến số nguyên là tạm thời và đặt nó bằng arr [đầu tiên] sau đó đặt arr [đầu tiên] thành arr [cuối cùng] và arr [cuối cùng] thành tạm thời. Tăng giá trị đầu tiên lên 1 và giảm giá trị cuối cùng đi 1.

  • In kết quả.

1. Sử dụng hàm sort ()

Ví dụ

#include <bits/stdc++.h>
using namespace std;
//using the sort() function
void Rearrangement(int arr[], int size){
   sort(arr, arr + size);
}
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 using inbuilt sort function 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 using inbuilt sort function is: -3 -1 -1 0 2 4 6

2. Lời gọi đệ quy tới một hàm

Ví dụ

#include <bits/stdc++.h>
using namespace std;
void Rotate(int arr[], int first, int last){
   while(first < last){
      int temp = arr[first];
      arr[first] = arr[last];
      arr[last] = temp;
      first++;
      last--;
   }
}
void Rearrangement(int arr[], int first, int last){
   if(first == last){
      return;
   }
   Rearrangement(arr, (first + 1), last);
   if(arr[first] >= 0){
      Rotate(arr, (first + 1), last);
      Rotate(arr, first, last);
   }
}
int main(){
   int arr[] = {4, 2, -1, -1, 6, -3, 0};
   int size = sizeof(arr)/sizeof(arr[0]);
   int temp = 0;
   for(int i = 0; i < size; i++){
      if(arr[i] < 0){
         temp++;
      }
   }
   //calling the function to rearrange the array
   Rearrangement(arr, 0, (size - 1));
   Rotate(arr, temp, (size - 1));
   //print the array after rearranging the values
   cout<<"Rearrangement of positive and negative numbers using Recursion 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 using Recursion is: -1 -1 -3 4 2 6 0