将顺序表(数组)中的元素a1,a2,a3,......,an变换为奇数号元素在前,偶数号元素在后的新表,即a1,a3,a5,...a2,a4,a6....
要求尽可能高效。
这里使用了数组模拟顺序表,数组首元素为A[0],顺序表首元素为a1,所以A[0]->a1;A[len-1]->an;
#include<stdio.h>
void Bubble_Swap(int A[],int len){
int i=len;int v=1;int temp;
if(len%2==0)i=len-1;
while(i>-1){
temp=A[i-1];
for(int j=0;j<v;j++){
A[i+j-1]=A[i+j];
}
A[i+v-1]=temp;
i-=2;v++;
}
}
int main(){
int A[]={1,2,3,4,5,6,7,8,9,10};
int len=sizeof(A)/sizeof(int);
Bubble_Swap(A,len-1);
for(int i=0;i<len;i++)
printf("%d ",A[i]);
}
结果:
2 4 6 8 10 1 3 5 7 9
#include<stdio.h>
void Bubble_Swap(int A[],int len){
int i=len;int v=1;int temp;
if(len%2==0)i=len-1;
while(i>1){//i>1因为本身A[1]就应该在第一位。
temp=A[i-1];
for(int j=0;j<v;j++){
A[i+j-1]=A[i+j];
}
A[i+v-1]=temp;
i-=2;v++;
}
}
int main(){
int A[]={0,1,2,3,4,5,6,7,8,9,10};//0用来占位,实际元素从A[1]开始。
int len=sizeof(A)/sizeof(int);
Bubble_Swap(A,len-1);
for(int i=1;i<len;i++)
printf("%d ",A[i]);
}
运行结果:
1 3 5 7 9 2 4 6 8 10