使用 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。
下面程序中使用的步骤如下
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
使用 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