/3.已知顺序表{a0,a1,a2,…,an-1},且每个元素都是不相同的,
试设计一个算法把所有的奇数移到所有的偶数的前面。/
# include <iostream>
# include <stdio.h>
# include <stdlib.h>
using namespace std;
const int maxn = 1000+10;
typedef struct node
{
int * arr;
int length;
int maxsize;
}sqlist;
void createsqlist(sqlist &l)
{
l.arr = (int*) malloc (maxn * sizeof(int));
l.length = 0;
l.maxsize = maxn;
}
void insqlist(sqlist& l, int n)
{
int *p;
printf("请依次输入数字来创建顺序表:\n");
for(p = l.arr; p<l.arr+n; p++)
{
scanf("%d", p);
}
l.length = n;
}
void outsqlist(sqlist l)
{
int* p;
printf("顺序表的元素为:\n");
for(p = l.arr; p<l.arr + l.length; p++)
printf("%d ", *p);
printf("\n");
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void change(sqlist& l)
{
int *i = l.arr;
int *j = l.arr + l.length -1;
while(i<j)
{
while( (*i)%2 == 1)//奇数
i++;
while((*j)%2 == 0)//偶数
j--;
if(i<j)
{
swap(i, j);
i++;
j--;
}
}
}
int main()
{
sqlist l;
createsqlist(l);
int n;
printf("请输入顺序表的元素个数n:\n");
scanf("%d", &n);
insqlist(l, n);
change(l);
outsqlist(l);
return 0;
}