1. 程式人生 > >18電腦科學與技術本指標和陣列實驗

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

:可以藉助一輔助陣列存放排好的資料,然後按要求存回原陣列。