18计算机科学与技术本指针和数组实验

  1. 借助指针完成重新排列一维数组元素的顺序,使得左边的说有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按照由小到大的次序存放。

提示

#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;
}

:可以借助一辅助数组存放排好的数据,然后按要求存回原数组。

猜你喜欢

转载自blog.csdn.net/whg841001/article/details/84618797