c++ - C++ 数组排序
问题描述
我必须解决一个问题,该问题包括在 C++ 中对数字列表进行排序。条件是:
- 正数,0 必须按升序排序
- 负数 - 降序
如果 A = {4,-8,7,-6,0,-7,5} 在最后 B = {0,4,5,7,-6,-7,-8 }
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int i,j,n,A[100],B[100],A_nenegative[100],A_negative[100],aux,m=0,k=0;
cout<<"max elements"; cin>>n;
cout<<"elements are"<<endl;
for(i=0;i<n;i++)
{
cin>>A[i];
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(A[i]>A[j])
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
for(i = 0; i< n; i++)
if(A[i]>=0) {
A_nenegative[i]=A[i];
B[i]=A_nenegative[i];
k++;
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(A[i]<A[j])
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
}
for(i=0;i<n;i++)
if(A[i]<0)
{
A_negative[i]=A[i];
m++;
}
}
这是我停下来的地方。我对 A_nenegative 中的正数和 A_negative 中的负数进行排序。所以问题是如何先归因于 B - A_nenegative,然后是 A_negative。我在立即对正数进行排序后尝试将其归因于 B ,如下所示:
for(i = 0; i< n; i++)
if(A[i]>=0) {
A_nenegative[i]=A[i];
B[i]=A_nenegative[i];
k++;
}
但我不知道下一步该做什么
解决方案
只需使用谓词。
std::sort(std::begin(a), std::end(a), [](int a, int b) {
if(a >= 0) {
if(b >= 0) return a < b;
else return true;
}
else {
if(b >= 0) return false;
else return a > b;
}
});
如果 a 需要在数组中的 b 之前,谓词返回 true,否则返回 false。
因此,如果 a >= 0 且 b >= 0 --- 我们检查是否 a < b(按升序对非负值进行排序)。
如果 a >= 0 且 b < 0 --- 那么 b 需要在 a 之后,因为所有负值都在非负之后。
如果 a < 0 且 b >= 0 --- 那么 b 需要在 a 之前。
if a < 0 and b < 0 --- 检查是否 a > b(按降序排序)。
推荐阅读
- php - CarbonPeriod 不会返回不完整的天数
- python-3.x - Discord.py:“Nonetype”对象没有属性“change_presence”
- python - 转推特定用户。Tweepy & 蟒蛇
- python - 分组后按条件过滤每个组
- javascript - Javascript 自动完成脚本使网站无响应
- python - 在 Python 中从日志文件中读取数据
- flutter - Flutter 圆形 TabBar 边框指示器
- image - Stream Builder 导致无限循环抖动
- python - 如何使用决策树进行生存分析?
- postgresql - 如何在 Liquibase 中为已创建的表添加索引