目录
一、规则
二、代码
三、测试
一、规则
使数组中所有奇数放到偶数前面,并且奇数部分从小到大排序,偶数部分从小到大排序
输入规则:
第一行:输入一个整数,代表数组中的元素个数
第二行:输入数据
输出:
所有奇数在前,偶数在后并且奇数部分从小到大排序,偶数部分从小到大排序
样例:
输入:
5 1 2 3 4 5
输出:
1 3 5 2 4
思路:
1.使用双指针分别从数组头和数组尾遍历,当头指针指向偶数,尾指针指向奇数,进行元素交换
2.如果头指针所指是奇数,头指针向右移动
3.如果尾指针所指是偶数,尾指针向左移动
4.在交换完毕后分别对奇数和偶数部分进行排序
二、代码
#include<iostream>
#include<algorithm>
using namespace std;
void Reorder(int *pData,unsigned int length,bool (*func)(int))
{
if(pData == NULL || length == 0 )
return;
int * pBegin = pData;
int * pEnd = pData + length -1;
while(pBegin < pEnd)
{
while(pBegin < pEnd && !func(*pBegin))
pBegin++;
while(pBegin < pEnd && func(*pEnd))
pEnd--;
if(pBegin < pEnd)
{
int temp = *pBegin;
*pBegin = *pEnd;
*pEnd = temp;
}
}
sort(pData,pEnd);
sort(pBegin,pData+length);
}
bool isEven(int n)
{
return (n & 1) == 0 ; //判断是否是偶数,是偶数返回True
}
void ReorderOddEven(int *pData,unsigned int length)
{
Reorder(pData,length,isEven);
}
int main()
{
int array_length,array_element;
cin>>array_length;
int * array = new int[array_length];
for(int i = 0;i < array_length;i++)
{
cin>>array_element;
array[i]=array_element;
}
ReorderOddEven(array,array_length);
cout<<endl;
for(int i = 0;i < array_length;i++)
{
cout<<array[i]<<" ";
}
delete [] array;
return 0;
}
三、测试
测试①
5
1 2 3 4 5
1 3 5 2 4
--------------------------------
请按任意键继续. . .
测试②
4
22 11 6 7
7 11 6 22
--------------------------------
请按任意键继续. . .