华为:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数
2013-04-16 21:06
513 查看
/* 对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放, 且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。 */ #include <cstdio> #include <cstdlib> #include <cstring> int comp(const void *p, const void *q) { return (*(int *)p - *(int *)q); } void sorts(int a[],int n) { int odd=0,even=0; int even_num=0,odd_num=0; int *r =a; int even_arr[100]={0}; int odd_arr[100]={0}; int *p_even = even_arr; int *p_odd = odd_arr; int *p = even_arr; int *q = odd_arr; for(int i=0;i<n;i++) { if(a[i]%2 == 0)//偶数 { even_num++; *p_even++ = a[i]; } else//奇数 { odd_num++; *p_odd++ = a[i]; } } qsort(even_arr,even_num,sizeof(even_arr[0]),comp); //偶数从大到小排列 qsort(odd_arr,odd_num,sizeof(odd_arr[0]),comp); //奇数从小到大排列 while(odd<odd_num && even<even_num) { *r++ = *q++; odd++; *r++ = *p++; even++; } while(even!=even_num&&odd!=odd_num) { if(even<even_num) { *r++ = *p++; even++; } while(odd<odd_num) { *r++ = *q++; odd++; } } } int main(/*int argc, char **argv*/) { int i; int a[]={2,0,3,9,4,10,7,11,15,22,66,31,21,87,99,101,177}; int n=sizeof(a)/sizeof(a[0]); sorts(a,n); for(i=0;i<n;i++) printf("%d ",a[i]); return 0; }
相关文章推荐
- java排序,随机生成一个数组,对其进行排序,偶数在前奇数在后,偶数从小到大排,奇数从大到小排
- (C语言-结构体)主函数创建5个学生的数组,写一个排序函数,让学生按姓名从小到大排序,主函数输出排序后的结果。
- 个有10个元素的整型一维数组,用户输入9个数据,调用函数,对数组元素进行从小到大排序后,在函数中输入一个数,插入到数组中正确的位置,并输出
- 华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。
- 华为招聘机试整理14:数组奇数偶数排序
- 定义一个有10个空间的整型数组,数组中的每个位置存放8-98之间的随机偶数, 输出这个数组中的每个数,再排序,排序后再输出。
- //问题:将n个数从小到大排序如果n是奇数输出正中间的数,如果n是偶数,输出中间的两个数(用动态内存分配的方法)
- //1.主函数创建5个学生的数组,写一个排序函数,让学生按姓名从小到大排序,主函数输出排序后的结果。
- 主函数创建5个学生的数组,写一个排序函数,让学生按姓名从小到大排序,主函数输出排序后的结果
- 打印一个数组中的数字,2个线程,一个打印奇数,一个打印偶数,交叉打印结果。
- 华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。 .
- 课堂提问(C语言):输入10个整数到一个数组,将奇数放在数组前面,偶数放在数组后面,然后输出整个数组。
- 快速排序(一个数组先做偶数排序后做奇数排序)
- 一个一维整形数组,若干个数字,统计数组中不同的数字出现的次数,并按照出现频率从小到大排序输出,相同频率按数字大小排序输出
- 华为招聘机试整理14:数组奇数偶数排序
- 华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置
- 主函数创建5个学生的数组,写一个排序函数,让学生按姓名从小到大排序,主函数输出排序后的结果。
- 1.将数组A中的内容和数组B中的内容进行交换。(数组一样大) 2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。 3.将三个数按从大到小输出。 4.求两个数的最大公约数。
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素