题目描述:给定一串数字,要求排序之后满足负数在前,正数在后(奇数在前,偶数在后)。
代码实现:
#include<iostream>
using namespace std;
void swap(int n,int m)
{
int tmp = 0;
tmp = m;
m = n;
n = tmp;
}
void print(int * arr,int len)
{
int i;
for(i = 0;i < len;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
void handle1(int * arr,int len)
{
int i = len - 1;
int j = len - 1;
while(i >= 0)
{
if(arr[i] > 0)
{
swap(arr[i],arr[j]);
--i;
--j;
}
else
{
--i;
}
}
}
void handle2(int * arr,int len)
{
int i = len - 1;
int j = len - 1;
while(i >= 0)
{
if(arr[i] % 2 == 0)
{
swap(arr[i],arr[j]);
--i;
--j;
}
else
{
--i;
}
}
}
int main()
{
int arr = {-1,2,3,3,0,-22,-66,-5,4,45,1};
int len = sizeof(arr)/sizeof(arr[0]);
cout<<"排序前:"<<endl;
print(arr,len);
cout<<"前负后正:"<<endl;
handle1(arr,len);
print(arr,len);
cout<<"前奇后偶:"<<endl;
handle2(arr,len);
print(arr,len);
return 0;
}
结果展示: