C++ 中偶数位置的正数和奇数位置的负数(相对顺序不保持)
在这个问题中,我们得到一个数组,我们的任务是将数组转换为所有正数位于偶数索引位置,所有负数位于奇数索引位置。
正数和负数的数量可能不相等,在这种情况下,我们将不会移动额外的值。
让我们举个例子来理解这个问题,
输入 − {3, 5, -1, 19, -7, -2}
输出 − {3, -1, 5, -7, 19, -2}
为了解决这个问题,我们将不得不找到数组中顺序错误的元素。找到这个元素的方法可能不止一种,这里我们将讨论其中两种。
方法 1
此方法将简单地遍历数组并查找不在其位置上的元素(即正数不在偶数位置,负数不在奇数位置)的第一次出现,然后交换它们。我们将重复此过程,直到遍历整个数组。
示例
程序演示了我们解决方案的实现,
#include<iostream>
using namespace std;
void swapElements(int* a, int i , int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
return ;
}
void printArray(int* a, int n){
for(int i = 0; i<n; i++)
cout<<a[i]<<"\t";
cout<<endl;
return ;
}
void generateOrderedArray(int arr[], int n){
for(int i = 0; i <n; i++){
if(arr[i] >= 0 && i % 2 == 1){
for(int j = i + 1; j <n; j++){
if(arr[j] < 0 && j % 2 == 0){
swapElements(arr, i, j);
break ;
}
}
}
else if(arr[i] < 0 && i % 2 == 0){
for(int j = i + 1; j <n; j++){
if(arr[j] >= 0 && j % 2 == 1){
swapElements(arr, i, j);
break;
}
}
}
}
printArray(arr, n);
}
int main(){
int arr[] = { 1, -3, 5, 6, -3, 6, 7, -4, 9, 10 };
int n = sizeof(arr)/sizeof(arr[0]);
cout<<"Inital Array is : ";
printArray(arr, n);
cout<<"Array with positive numbers at even index and negative numbers at odd index :";
generateOrderedArray(arr,n);
return 0;
}输出
Inital Array is : 3 5 -1 19 -7 -2 Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2
方法 2
在这种方法中,我们将使用一个类似于快速排序技术的流程。在这里,我们将使用两个指针,一个用于正数,另一个用于负数。我们将正数指针设置在索引 0(偶数索引),负数指针设置在索引 1(奇数索引)。然后指针每步前进 2 个位置。当正数指针遇到负数,负数指针遇到正数时停止。然后在两者都停止时交换。如果任何一个指针超出数组索引,我们将停止执行。
示例
程序演示了我们解决方案的实现
#include <iostream>
using namespace std;
void swapElements(int* a, int i , int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
return ;
}
void printArray(int *a, int n){
for (int i = 0; i <n; i++)
cout<<a[i]<<"\t";
cout<<endl;
}
void generateOrderedArray(int a[], int size){
int positive = 0, negative = 1;
while (1) {
while (positive < size && a[positive] >= 0)
positive += 2;
while (negative <size && a[negative] <= 0)
negative += 2;
if (positive < size && negative < size)
swapElements(a, positive, negative);
else
break;
}
}
int main(){
int arr[] = { 3, 5, -1, 19, -7, -2 };
int n = (sizeof(arr) / sizeof(arr[0]));
cout<<"Inital Array is : ";
printArray(arr, n);
cout<<"Array with positive numbers at even index and negative numbers at odd index : ";
generateOrderedArray(arr, n);
printArray(arr, n);
return 0;
}输出
Inital Array is : 3 5 -1 19 -7 -2 Array with positive numbers at even index and negative numbers at odd index : 3 -1 5 -7 19 -2
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP