#include <stdio.h>
/* *
* 函数名:void swap(int *a, int i, int j)
* 作用:交换数据
* 参数:
* a:数据buf
* i:数组下标
* j:数组下标
* 返回值:
*/
void swap(int *a, int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
/* *
* 函数名:void quick_sort(int *a, int left, int right)
* 作用:将数据按照从小到大排序
* 参数:
* a:数据buf
* left:最左边的起始点
* right:最右边的结束长度
* 返回值:
*/
void quick_sort(int *a, int left, int right)
{
//边界条件
if (left>=right)
{
return;
}
int i = left, j = right;
int num = a[right]; //以右边的值为基准值
while(i<j)
{
while(i<j && a[i]<num)//把小的数据往前移
{
i++;
}
if (i<j)
{
a[j] = a[i];
j--;
}
while(i<j && a[j]>num)//把大的数据往右移
{
j--;
}
if (i<j)
{
a[i] = a[j];
i++;
}
}
a[j] = num;
//以基准值为中心,小的在左边是一个数组
quick_sort(a, left, i-1);
//以基准值为中心,大的在右边是一个数组
quick_sort(a, i+1, right);
}
/* *
* 函数名:void oddCheck (int * data, int datanum, int* oddData, int* oddnum)
* 作用:得到传入数据中的所有奇数
* 参数:
* data:待解析的数据buf
* datanum:数据长度
* evenData:存放奇数数据的buf
* evennum:奇数数据长度
* 返回值:
*/
void oddCheck (int * data, int datanum, int* oddData, int* oddnum)
{
int j = 0;
for (int i = 0; i < datanum; i++)
{
//如果数据对2取余后不为0,即为奇数
if(data[i]%2 != 0)
{
oddData[j++] = data[i];
}
}
*oddnum = j;
quick_sort(oddData, 0, *oddnum-1);
}
/* *
* 函数名:void evenCheck (int * data, int datanum, int* evenData, int* evennum)
* 作用:得到传入数据中的所有偶数
* 参数:
* data:待解析的数据buf
* datanum:数据长度
* evenData:存放偶数数据的buf
* evennum:偶数数据长度
* 返回值:
*/
void evenCheck (int * data, int datanum, int* evenData, int* evennum)
{
int j = 0;
for (int i = 0; i < datanum; i++)
{
//如果数据对2取余后不为0,即为奇数
if(data[i]%2 == 0)
{
evenData[j++] = data[i];
}
}
*evennum = j;
quick_sort(evenData, 0, *evennum-1);
}
int main(int argc, char const *argv[])
{
int num = 0, oddnum = 0, evennum = 0;
int data[30] = {0}, oddData[30] = {0}, evenData[30] = {0};
// printf("请输入希望输入的整数个数:\n"); //不想要可以屏蔽
scanf("%d",&num);
if(num <2 || num >=30)
{
printf("请输入大于2小于30的值\n");
return 0;
}
for (int i = 0; i < num; i++)
{
scanf("%d",&data[i]);
}
for (int i = 0; i < num; i++)
{
printf("%d\n",data[i]);
}
oddCheck(data,num,oddData,&oddnum);
evenCheck(data,num,evenData,&evennum);
for (int i = 0; i < oddnum-1; i++)
{
printf("%d ",oddData[i]);
}
printf("%d\n",oddData[oddnum-1]);
for (int i = 0; i < evennum-1; i++)
{
printf("%d ",evenData[i]);
}
printf("%d\n",evenData[evennum-1]);
return 0;
}