输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
首先,可以想到,用前后两个指针一个在数组首一个在数组尾同时往数组中间遍历,当遇到前指针遇到偶数后指针遇到奇数时,就将两个数交换,直到两指针相遇或者前指针超过了后指针,这个有点类似快速排序的思想;
程序设计如下:
#include <iostream>
#include <assert.h>
using namespace std;
void AdjustArr(int *parr, size_t size) //调整数组
{
assert(parr && size);
int *start = parr;
int *end = parr+size-1;
while(start < end)
{
while((start < end)&&((*start % 2) != 0))//当start指针遇到偶数停止
++start;
while((start < end)&&((*end % 2) == 0)) //当end指针遇到奇数停止
--end;
if(start < end)//判断start和end位置
{ swap(*start, *end);
++start;
--end;
}
else
return;
}
}
void PrintArr(int *parr, size_t size) //打印数组
{
assert(parr && size);
for(size_t i = 0; i < size; ++i)
{
cout<<parr[i]<<" ";
}
cout<<endl;
}
int main()
{
int arr[] = {1,5,2,4,6,11,3,8,0,7};
size_t size = sizeof(arr)/sizeof(arr[0]);
PrintArr(arr, size);
AdjustArr(arr, size);
PrintArr(arr, size);
return 0;
}
运行程序,结果:
《完》
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。