实验要求
C语言:定义一个函数,实现数组元素奇数在左、偶数在右。(要求用指针来实现)
关键代码
纯代码
void sort(int a[],int n){
int *p,*q;
p=a;
q=a+n-1;
while(p<q){
while(*p%2!=0){
p++;
}
while(*q%2==0){
q--;
}
if(p>q){
break;
}
swap(p,q);
p++;
q--;
}
}
代码分析
void sort(int a[],int n){ //n为数组的长度
int *p,*q; //定义一个指针p和q
p=a; //让p指向该数组的第一个元素
q=a+n-1; //让q指向该数组的最后一个元素
while(p<q){
while(*p%2!=0){ //判断是否为奇数
p++; //若该位置是奇数,则不交换,指针移到下一位
}
while(*q%2==0){ //判断是否为偶数
q--; //若该位置是偶数,则不交换,指针移到前一位
}
if(p>q){ //当p与q相遇时,停止循环
break;
}
swap(p,q); //交换p,q的值
p++;
q--; //p、q移动
}
}
代码
#include <stdio.h>
void swap(int *p1,int *p2) { //交换p、q的值
int temp=*p1;
*p1=*p2;
*p2=temp;
}
void sort(int a[],int n){
int *p,*q;
p=a;
q=a+n-1;
while(p<q){
while(*p%2!=0){
p++;
}
while(*q%2==0){
q--;
}
if(p>q){
break;
}
swap(p,q);
p++;
q--;
}
}
int main(){
int a[]={3,5,2,8,6,1,4,9,7,10};
int n=sizeof(a)/sizeof(int);
printf("排序前:");
for(int i=0;i<n;i++){
printf("%d\t",a[i]);
}
printf("\n");
sort(a,n);
printf("排序后:");
for(int i=0;i<n;i++){
printf("%d\t",a[i]);
}
return 0;
}