C++中使用常数额外空间重新排列正负数
给定一个包含正数和负数的整数类型数组,例如任意大小的arr[]。任务是使用C++ STL的内置排序函数以及递归编码技术对数组进行重新排列,并将结果打印出来。
让我们看看各种输入输出场景:
输入 - int arr[] = {4, 2, -1, -1, 6, -3, 0}
输出 - 使用常数额外空间重新排列正负数的结果是:-3 -1 -1 0 6 2 4。
说明 - 我们得到一个大小为7的整数数组,其中包含正数和负数元素。现在,我们将重新排列数组,以便所有数组元素在常数额外空间内排序,最终结果将是-3 -1 -1 0 2 4 6。
输入 - int arr[] = {-9, -10, 2, 3, 10, 5, 8, 4}
输出 - 使用常数额外空间重新排列正负数的结果是:-9 -10 2 3 10 5 8 4
说明 - 我们得到一个大小为8的整数数组,其中包含正数和负数元素。现在,我们将重新排列数组,以便所有数组元素在常数额外空间内排序,最终结果将是-9 -10 2 3 10 5 8 4。
下面程序中使用的方法如下:
输入一个整数类型元素的数组,并计算数组的大小。
使用FOR循环打印执行重新排列操作之前的数组。
调用函数Rearrangement(arr, size),并将数组和数组大小作为参数传递。
在函数Rearrangement(arr, size)内部:
声明一个整数类型变量i为0,j为size -1。
启动while(true)。在while循环内,启动另一个循环,当arr[i]小于0且i小于size时,将i加1。
启动WHILE循环,当arr[j]大于0且j大于0时,将j减1。
检查IF i小于j,则将temp设置为arr[i],arr[i]设置为arr[j],arr[j]设置为temp。
否则,break。
打印结果。
示例
#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;
}输出
如果我们运行以上代码,它将生成以下输出
Rearrangement of positive and negative numbers with constant extra space is: -3 -1 -1 0 6 2 4
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP