一、所有奇数移动到所有偶数之前(时间复杂度O(n))
void remove(int a[],int low,int high){
while(low<high){
for(;low<high&&(a[low]%2);++low);
for(;low<high&&!(a[high]%2);--high);
int t = a[low];
a[low]=a[high];
a[high]=t;
}
}
二、小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分
void remove(int a[],int n){
int i;j;k;t=a[0];
for(i=1;i<n;i++){
if(a[i]<t){
k=a[i];
for(j=i;j>0&&(a[j]=a[j-1]);--j);
a[0]=k;
}
}
}
三、求数组中n个数之和递归算法
int sum(int a[],int n){
if(n<=0)
return 0;
return a[n-1]+sum(a,n-1);
}
四、求数组最大值的递归算法
int Max(int a[],int n){
if(n>1){
int t=Max(a,n-1);
return (t>a[n-1])?t;a[n-1];
}else{
return a[0];
}
}
五、删除顺序表从i到j所有元素
int delete(int a[],int i,int j,int n){
for(int k=j;k<n&&(a[k-(j-i+1)]=a[k]);++k);
n=n-(j-i+1);
}
六、线性表左半部分小于A[n-1]右半部分大于A[n-1],A[n-1]在两部分之间
void remove(int a[],int n){
int t=a[n-1];
for(int i=n-2;i>0;--i){
if(a[i]>t){
int k=a[i];
for(int j=i;j<n&&(a[j]=a[j+1]);j++);
a[n-1]=k;
}
}
}
七、线性表元素0~m+n-1 前m个元素递增,后n个元素递增,操作后是整个线性表有序
void remove(int a[],int m+n){
for(int i=m;i<m+n;++i){
int t = a[i];
for(int j=i-1;j>=0&&(a[j]>t);j--){
a[j+1]=a[j];
}
a[j+1]=t;
}
}
八、将数组非零元素依次移动到数组前端
void remove(int a[],int n){
for(int i=1;i<n;i++){
if(a[i]){
int t=a[i];
for(int j=i;j>0&&(a[j]=a[j-1]);--j);
a[0]=t;
}
}
}
九、找到数组最k小的数
int find(int a[],int n,int k){
int flag,i,j,t;
for(i=n-1;i>0;i--){
flag=0;
for(j=1;j<=i;j++){
if(a[j-1]>a[j]){
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
flag=1;
}
if(flag=0)
break;
}
}
return a[k-1];
}
十、非递归找数组最大最小值
void maxMin(int a[],int n){
int max,min;
max=min=a[0];
for(int i=1;i<n;++i){
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
printf("最大值为%d,最小值为%d\n",max,min);