- 借助指针完成重新排列一维数组元素的顺序,使得左边的说有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按照由小到大的次序存放。
提示
#include<iostream>
using namespace std;
void fun_max_min(int *p,int count_os,int count_js)
{
int temp[10],k;//临时数组和临时变量
int i,j;//循环变量
int *q=temp;//指针q指向临时数组temp
/**
第二个步骤:将数组中偶数存储到临时数组temp中 ,
temp数组的下标从0开始
*/
for(i=0,j=0;i<10,j<count_os;i++)
{
if(*(p+i)%2==0)
{
*(q+j)=*(p+i);
j++;
}
}
/**
第三个步骤:将临时数组temp中的前count_os个元素按照由大到小
进行排序存放
*/
for(i=0;i<count_os;i++)
{
for(j=i+1;j<count_os;j++)
{
if(*(q+i)<*(q+j))
{
k=*(q+i);
*(q+i)=*(q+j);
*(q+j)=k;
}
}
}
/**
第四个步骤:将数组中奇数存储到临时数组temp中,
temp数组的下标从count_os开始
*/
for(i=0,j=count_os;i<10,j<10;i++)
{
if(*(p+i)%2!=0)
{
*(q+j)=*(p+i);
j++;
}
}
/**
第五个步骤:将临时数组temp中的后count_js个元素按照由小到大
进行排序存放 ,temp数组的下标从count_os开始
*/
for(i=count_os;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(*(q+i)>*(q+j))
{
k=*(q+i);
*(q+i)=*(q+j);
*(q+j)=k;
}
}
}
/**
第六个步骤:将临时数组temp中的值输出,该数组中的元素分成两部分
前6个元素为偶数,由大到小存放;后四个元素为奇数,由小到大存放
*/
for(j=0;j<10;j++)
cout<<*(q+j)<<" ";
}
int main(){
int a[10]={1,2,3,8,10,11,4,6,9,14};
int i,j;//循环变量
int count_os=0;//偶数计数器
int count_js=0;//奇数计数器
/**
第一个步骤:利用循环统计数组中奇数和偶数的个数
分别放在 count_os和count_js
*/
for(i=0;i<10;i++)
{
if(a[i]%2==0)
{
count_os++;
}
else
count_js++;
}
/**调用函数fun_max_min实现题目要求
**第一个参数为初始化数组
**第二个参数为数组中偶数元素个数
**第三个参数为数组中奇数元素个数
**/
fun_max_min(a,count_os,count_js);
return 0;
}
:可以借助一辅助数组存放排好的数据,然后按要求存回原数组。