移动数组中非零元素至数组的前端 :
#include<iostream>
using namespace std;
void movelement(int a[],int n)
{
int i=-1,j,temp;
for(j=0;j<n;++j)
if(a[j]!=0)
{
++i;
if(i!=j)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
int main()
{
int a[]={8,5,2,4,0,0,2,0,1};
movelement(a,9);
for(int i=0;i<9;++i)
cout<<a[i]<<" ";
}
递归求浮点数组中的最大值元素、所有元素之和、所有元素的平均值:
#include<iostream>
using namespace std;
float findmax(float A[],int i,int j)
{
float max;
if(i==j)
return A[i];
else
{
max=findmax(A,i+1,j);
if(A[i]>max)
return A[i];
else
return max;
}
}
float arraysum(float A[],int i,int j)
{
if(i==j)
return A[i];
else
return A[i]+arraysum(A,i+1,j);
}
float arrayavg(float A[],int i,int j)
{
if(i==j)
return A[i];
else
return (A[i]+(j-i)*arrayavg(A,i+1,j))/(j-i+1);
}
int main()
{
float a[]={8,5,2,4,0,0,2,0,1};
cout<<findmax(a,0,9)<<endl;
cout<<arraysum(a,0,9)<<endl;
cout<<arrayavg(a,0,8)<<endl;
}
将数组中所有奇数移至偶数前:
#include<iostream>
using namespace std;
void divide(int A[],int n)
{
int i=0,j=n-1,temp;
while(i<j)
{
while(A[i]%2==1&&i<j)
++i;
while(A[j]%2==0&&i<j)
--j;
if(i<j)
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
++i;
--j;
}
}
}
int main()
{
int a[]={8,5,2,6,7,9,3,0,1};
divide(a,9);
for(int i=0;i<9;++i)
cout<<a[i]<<" ";
}
将数组分为两个部分,左半部分都小于A[n-1],右半部分都大于A[n-1]:
#include<iostream>
using namespace std;
void divide(int A[],int n)
{
int temp;
int i=0,j=n-1;
temp=A[i];
A[i]=A[j];
A[j]=temp;
temp=A[i];
while(i!=j)
{
while(j>i&&A[j]>temp)--j;
if(i<j)
{
A[i]=A[j];
++i;
}
while(i<j&&A[i]<temp)++i;
if(i<j)
{
A[j]=A[i];
--j;
}
}
A[i]=temp;
}
int main()
{
int a[]={8,1,2,6,7,9,3,0,5};
divide(a,9);
for(int i=0;i<9;++i)
cout<<a[i]<<" ";
}