將順序表(數組)中的元素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