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