算法题目---调整数组顺序使奇数位于偶数前面
2017-07-07 09:11
363 查看
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
void record1(int *pData,unsigned int length)
{
if(pData == NULL || length == 0)
return;
int *pBegin = pData;
int *pEnd = pData + length -1;
while(pBegin < pEnd)
{
while(pBegin < pEnd && (*pBegin & 0x1) != 0)
pBegin++;
while(pBegin < pEnd && (*pEnd & 0x1) == 0)
pEnd--;
if(pBegin < pEnd)
{
int tmp = *pBegin;
*pBegin = *pEnd;
*pEnd = tmp;
}
}
}
bool isEven(int n)
{
return (n & 1) == 0;
}
void record(int *pData,unsigned int len,bool (*func)(int))
{
if(pData == NULL || len == 0)
return ;
int *pBegin = pData;
int *pEnd = pData + len -1;
while(pBegin < pEnd)
{
while(pBegin < pEnd && !func(*pBegin))
pBegin++;
while(pBegin<pEnd && func(*pEnd))
pEnd--;
if(pBegin < pEnd)
{
int tmp = *pBegin;
*pBegin = *pEnd;
*pEnd = tmp;
}
}
}
void record2(int *pData,unsigned int len)
{
record(pData,len,isEven);
}
void PrintArray(int numbers[], int length)
{
if(length < 0)
return;
for(int i = 0; i < length; ++i)
printf("%d\t", numbers[i]);
printf("\n");
}
void Test(char* name,int *num,int len)
{
if(name != NULL)
printf("%s begins:\n",name);
int *copy = new int[len];
for(int i=0;i<len;++i)
{
copy[i] = num[i];
}
printf("test for solution 1:\n");
PrintArray(copy, len);
record1(copy,len);
PrintArray(copy, len);
printf("test for solution 2:\n");
PrintArray(copy, len);
record2(copy,len);
PrintArray(copy, len);
delete[] copy;
}
void Test1()
{
int numbers[] = {1, 2, 3, 4, 5, 6, 7};
Test("Test1", numbers, sizeof(numbers)/sizeof(int));
}
void Test2()
{
int numbers[] = {2, 4, 6, 1, 3, 5, 7};
Test("Test2", numbers, sizeof(numbers)/sizeof(int));
}
void Test3()
{
int numbers[] = {1, 3, 5, 7, 2, 4, 6};
Test("Test3", numbers, sizeof(numbers)/sizeof(int));
}
void Test4()
{
int numbers[] = {1};
Test("Test4", numbers, sizeof(numbers)/sizeof(int));
}
void Test5()
{
int numbers[] = {2};
Test("Test5", numbers, sizeof(numbers)/sizeof(int));
}
void Test6()
{
Test("Test6", NULL, 0);
}
int main()
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
return 0;
}
使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
void record1(int *pData,unsigned int length)
{
if(pData == NULL || length == 0)
return;
int *pBegin = pData;
int *pEnd = pData + length -1;
while(pBegin < pEnd)
{
while(pBegin < pEnd && (*pBegin & 0x1) != 0)
pBegin++;
while(pBegin < pEnd && (*pEnd & 0x1) == 0)
pEnd--;
if(pBegin < pEnd)
{
int tmp = *pBegin;
*pBegin = *pEnd;
*pEnd = tmp;
}
}
}
bool isEven(int n)
{
return (n & 1) == 0;
}
void record(int *pData,unsigned int len,bool (*func)(int))
{
if(pData == NULL || len == 0)
return ;
int *pBegin = pData;
int *pEnd = pData + len -1;
while(pBegin < pEnd)
{
while(pBegin < pEnd && !func(*pBegin))
pBegin++;
while(pBegin<pEnd && func(*pEnd))
pEnd--;
if(pBegin < pEnd)
{
int tmp = *pBegin;
*pBegin = *pEnd;
*pEnd = tmp;
}
}
}
void record2(int *pData,unsigned int len)
{
record(pData,len,isEven);
}
void PrintArray(int numbers[], int length)
{
if(length < 0)
return;
for(int i = 0; i < length; ++i)
printf("%d\t", numbers[i]);
printf("\n");
}
void Test(char* name,int *num,int len)
{
if(name != NULL)
printf("%s begins:\n",name);
int *copy = new int[len];
for(int i=0;i<len;++i)
{
copy[i] = num[i];
}
printf("test for solution 1:\n");
PrintArray(copy, len);
record1(copy,len);
PrintArray(copy, len);
printf("test for solution 2:\n");
PrintArray(copy, len);
record2(copy,len);
PrintArray(copy, len);
delete[] copy;
}
void Test1()
{
int numbers[] = {1, 2, 3, 4, 5, 6, 7};
Test("Test1", numbers, sizeof(numbers)/sizeof(int));
}
void Test2()
{
int numbers[] = {2, 4, 6, 1, 3, 5, 7};
Test("Test2", numbers, sizeof(numbers)/sizeof(int));
}
void Test3()
{
int numbers[] = {1, 3, 5, 7, 2, 4, 6};
Test("Test3", numbers, sizeof(numbers)/sizeof(int));
}
void Test4()
{
int numbers[] = {1};
Test("Test4", numbers, sizeof(numbers)/sizeof(int));
}
void Test5()
{
int numbers[] = {2};
Test("Test5", numbers, sizeof(numbers)/sizeof(int));
}
void Test6()
{
Test("Test6", NULL, 0);
}
int main()
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
return 0;
}
相关文章推荐
- 【编程题目】调整数组顺序使奇数位于偶数前面
- 题目1516:调整数组顺序使奇数位于偶数前面
- //1.调整数组使奇数全部都位于偶数前面。 //题目: //输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。
- 【经典算法】:剑指offer(08)-调整数组顺序使奇数位于偶数前面
- 数据结构——算法之(026)( 调整数组顺序使奇数位于偶数前面)
- 题目1516:调整数组顺序使奇数位于偶数前面-九度
- 题目1516:调整数组顺序使奇数位于偶数前面
- 题目1516:调整数组顺序使奇数位于偶数前面-归并排序
- [Jobdu] 题目1516:调整数组顺序使奇数位于偶数前面
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面[算法]
- 九度 题目1516:调整数组顺序使奇数位于偶数前面
- 题目1516:调整数组顺序使奇数位于偶数前面,并保证奇数和奇数,偶数和偶数之间的相对位置不变
- 九度oj 题目1516:调整数组顺序使奇数位于偶数前面
- 面试算法(十三)调整数组顺序使奇数位于偶数前面
- 题目1516:调整数组顺序使奇数位于偶数前面
- 题目1516:调整数组顺序使奇数位于偶数前面
- 题目14:调整数组顺序使奇数位于偶数前面
- 重拾算法之剑指Offier——调整数组顺序使奇数位于偶数前面
- 《剑指Offer》题目:调整数组顺序使奇数位于偶数前面
- 九度oj 题目1516:调整数组顺序使奇数位于偶数前面