题目名称:奇偶排序
时间限制:1000ms内存限制:256M
题目描述
一个数组里有奇数有偶数(乱序),调整数组顺序使奇数位于偶数前面。(测试用例仅做参考,我们会根据代码质量进行评分)
输入描述:
第一行输入整数n。 第二行输入n个整数。
输出描述:
输出排序后的n个整数。
示例
示例1
输入
4
2 3 1 23
输出
3 1 23 2
所需变量
int ji[100005] ;//用于装每一个奇数的数组
int ou[10005] ;//用于装每一个偶数的数组
int n; //用于输入这个数组有多少个数
int temp;//用于接受每一个未分组的数字
int i; //循环变量
int jii;//奇数的循环变量
int oui;//偶数的循环变量
int control;//用于判断第一个数是否已经输入
思路:我们可以可以将所有数字先输入进来,然后再判断这个数是奇数还是偶数,然后再将它分组,分组后记得将后面那个数置为-1,这样好判断未来的终止条件。
然后再将每个数组中的数一个一个输出出来就完成了。
该算法本人认为还是比较优的,如果有更好的想法,欢迎q我!
代码如下(编译器是dev,语言是C语言):
#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
int ji[100005] = {0},ou[100005] = {0},n,temp,i,jii = 0,oui = 0,control = 0;
int main(){
ji[0] = -1;
ou[0] = -1;
scanf("%d",&n);
for(i = 0;i<n;i++){
scanf("%d",&temp);
if(temp%2 == 0){
ou[oui++] = temp;
ou[oui] = -1;
}else{
ji[jii++] = temp;
ji[jii] = -1;
}
}
i = 0;
while(true){
if(ji[i] == -1){
break;
}
if(control == 0){
printf("%d",ji[i]);
control = 1;
}else{
printf(" %d",ji[i]);
}
i++;
}
i = 0;
while(true){
if(ou[i] == -1){
break;
}
if(control == 0){
printf("%d",ou[i]);
control = 1;
}else{
printf(" %d",ou[i]);
}
i++;
}
printf("\n");
return 0;
}
版权声明:本文为weixin_43708800原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。