使用 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
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP