使用 C++ 內建排序函式重新排列正數和負數


給定一個包含正數和負數的整數型別陣列,例如,任意大小的 arr[]。任務是以這樣的方式重新排列陣列,以便使用 C++ STL 的內建排序函式以及使用遞迴編碼技術對陣列的所有元素進行排序,並列印結果。

讓我們看看此示例的各種輸入輸出場景 -

輸入 - int arr[] = {4, 2, -1, -1, 6, -3, 0}

輸出 - 使用內建排序函式重新排列正數和負數的結果為:-3 -1 -1 0 2 4 6。

解釋 - 給定一個大小為 7 的整數陣列,其中包含正負元素。現在,我們將以這樣的方式重新排列陣列,使得陣列的所有元素都已排序,即所有負元素都出現在所有正元素之前,最終結果將是 -3 -1 -1 0 2 4 6。

輸入 - int arr[] = {-9, -10, 2, 3, 10, 5, 8, 4}

輸出 - 使用內建排序函式重新排列正數和負數的結果為:-10 -9 2 3 4 5 8 10。

解釋 - 給定一個大小為 8 的整數陣列,其中包含正負元素。現在,我們將以這樣的方式重新排列陣列,使得陣列的所有元素都已排序,即所有負元素都出現在所有正元素之前,最終結果將是 -10 -9 2 3 4 5 8 10。

下面程式中使用的步驟如下

使用 sort()

  • 輸入一個整數型別元素的陣列並計算陣列的大小。

  • 將資料傳遞給函式 Rearrangement(int arr[], int size)

  • 在函式 Rearrangement(int arr[], int size) 內部

    • 透過將陣列和陣列大小作為引數傳遞給函式來呼叫 C++ STL 的 sort 函式,它將返回排序後的陣列。

  • 列印結果。

使用遞迴

  • 輸入一個整數型別元素的陣列並計算陣列的大小。

  • 宣告一個臨時變數,例如 temp。

  • 從 i 開始迴圈 FOR 直到 i 小於陣列大小。在迴圈內,檢查 arr[i] 是否小於 0,然後將 temp 增加 1。

  • 透過將陣列、0 和 size -1 作為引數傳遞給函式來呼叫 Rearrangement(arr, 0, (size - 1))。

  • 透過將陣列、temp 和 size - 1 傳遞給函式來呼叫 rotate 函式。

  • 在函式 Rearrangement(int arr[], int first, int last) 內部

    • 檢查 IF first 等於 last 然後返回。

    • 對函式 Rearrangement() 進行遞迴呼叫,並將陣列、first + 1 和 last 元素作為引數傳遞。

    • 檢查 IF arr[first] 大於 0 然後對函式進行呼叫,如 Rotate(arr, (first + 1), last) 和 Rotate(arr, first, last)

  • 在函式 Rotate(int arr[], int first, int last) 內部

    • 開始迴圈 while first 小於 last。在 while 迴圈內,宣告整數變數為 temp 並將其設定為 arr[first],然後將 arr[first] 設定為 arr[last],並將 arr[last] 設定為 temp。將 first 增加 1 並將 last 減小 1。

  • 列印結果。

1. 使用 sort() 函式

示例

#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;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出

Rearrangement of positive and negative numbers using inbuilt sort function is: -3 -1 -1 0 2 4 6

2. 對函式的遞迴呼叫

示例

#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;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出

Rearrangement of positive and negative numbers using Recursion is: -1 -1 -3 4 2 6 0

更新於: 2021-11-02

1K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告