题目来自网上
题目:已知一个整数数组,写一个程序使其中的奇数在前偶数在后。
思路:类似快速排序的一次划分。
代码:
void Divide(int nArr[],int nStart,int nEnd)
{
assert(nArr != NULL && nStart >= 0 && nEnd >= nStart);
int tmp = 0;
while (nStart < nEnd)
{
while (nStart < nEnd && (nArr[nStart] & 1) == 1)//遇到奇数往nEnd方向走
{
nStart++;
}
while (nStart < nEnd && (nArr[nEnd] & 1) == 0)//遇到偶数往nStart方向走
{
nEnd--;
}
if (nStart < nEnd)
{
tmp = nArr[nStart];
nArr[nStart] = nArr[nEnd];
nArr[nEnd] = tmp;
nStart++;
nEnd--;
}
}
}
测试代码:
#include <iostream>
#include <assert.h>
using namespace std;
void Divide(int nArr[],int nStart,int nEnd)
{
assert(nArr != NULL && nStart >= 0 && nEnd >= nStart);
int tmp = 0;
while (nStart < nEnd)
{
while (nStart < nEnd && (nArr[nStart] & 1) == 1)//遇到奇数往nEnd方向走
{
nStart++;
}
while (nStart < nEnd && (nArr[nEnd] & 1) == 0)//遇到偶数往nStart方向走
{
nEnd--;
}
if (nStart < nEnd)
{
tmp = nArr[nStart];
nArr[nStart] = nArr[nEnd];
nArr[nEnd] = tmp;
nStart++;
nEnd--;
}
}
}
void Show(int nArr[],int nLen)
{
assert(nArr != NULL && nLen > 0);
for (int i = 0;i < nLen;i++)
{
cout<<nArr[i]<<" ";
}
cout<<endl;
}
int main()
{
int nArrOne[6] = {0,1,6,9,12,15};
Divide(nArrOne,0,5);
Show(nArrOne,6);
int nArrTwo[6] = {1,1,1,1,1,1};
Divide(nArrTwo,0,5);
Show(nArrTwo,6);
int nArrThree[6] = {2,2,2,2,2,2};
Divide(nArrThree,0,5);
Show(nArrThree,6);
int nArrFor[6] = {-2,-2,-2,-1,-1,-1};
Divide(nArrFor,0,5);
Show(nArrFor,6);
system("pause");
}