使用 C++ 中的内置排序函数重新排列正负数
我们得到一个包含正数和负数的整数类型数组,比方说,任何给定大小的arr[]。任务是以这样一种方式重新排列数组,即使用C++STL的内置排序函数以及使用编码和打印结果的递归技术对数组的所有元素进行排序。
让我们看看这个的各种输入输出场景-
输入 -intarr[]={4,2,-1,-1,6,-3,0}
输出 -使用内置排序功能重新排列正负数是:-3-1-10246。
说明 -我们得到一个大小为7的整数数组,其中包含正元素和负元素。现在,我们将重新排列数组,使数组的所有元素都排序,即所有负元素出现在所有正元素之前,最终结果将是-3-1-10246。
输入 -intarr[]={-9,-10,2,3,10,5,8,4}
输出 -使用内置排序功能重新排列正负数是:-10-92345810。
说明-我们得到一个大小为8的整数数组,其中包含正元素和负元素。现在,我们将重新排列数组,使数组的所有元素都排序,即所有负元素出现在所有正元素之前,最终结果将是-10-92345810。
下面程序中使用的方法如下
使用sort()
输入整数类型元素的数组并计算数组的大小。
将数据传递给函数Rearrangement(intarr[],intsize)
在函数内部,Rearrangement(intarr[],intsize)
通过将数组和数组大小作为参数传递给函数来调用C++STL的排序函数,它将返回排序后的数组。
打印结果。
使用递归
输入整数类型元素的数组并计算数组的大小。
声明一个临时变量,比方说,temp。
从i开始循环FOR直到i小于数组的大小。在循环内部,检查arr[i]是否小于0,然后将temp增加1。
通过将数组、0和大小-1作为参数传递给函数来调用Rearrangement(arr,0,(size-1))。
通过将数组、温度和大小-1传递给函数来调用旋转函数。
函数内部重排(intarr[],intfirst,intlast)
检查IF首先等于最后然后返回。
对函数进行递归调用Rearrangement()并传递数组,第一个+1和最后一个元素作为参数。
检查IFarr[first]大于0然后调用函数为Rotate(arr,(first+1),last)和Rotate(arr,first,last)
函数内部Rotate(intarr[],intfirst,intlast)
在第一个少于最后一个时开始。在while中,将整数变量声明为temp并使用arr[first]设置它,然后将arr[first]设置为arr[last],将arr[last]设置为temp。第一个加1,最后一个减1。
打印结果。
1.使用sort()功能
示例
#include <bits/stdc++.h> using namespace std; //使用sort()函数 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]); //调用函数重新排列数组 Rearrangement(arr, size); //重新排列值后打印数组 cout<<"使用内置排序功能重新排列正负数是: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出
使用内置排序功能重新排列正负数是: -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++; } } //调用函数重新排列数组 Rearrangement(arr, 0, (size - 1)); Rotate(arr, temp, (size - 1)); //重新排列值后打印数组 cout<<"使用递归重新排列正负数是: "; for(int i = 0; i < size; i++){ cout<< arr[i] << " "; } return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出
使用递归重新排列正负数是: -1 -1 -3 4 2 6 0