九度OJ 1516 调整数组顺序使奇数位于偶数前面 -- 归并排序

发布时间:2017-1-19 22:54:16 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"九度OJ 1516 调整数组顺序使奇数位于偶数前面 -- 归并排序",主要涉及到九度OJ 1516 调整数组顺序使奇数位于偶数前面 -- 归并排序方面的内容,对于九度OJ 1516 调整数组顺序使奇数位于偶数前面 -- 归并排序感兴趣的同学可以参考一下。

题目地址:http://ac.jobdu.com/problem.php?pid=1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 输入: 每个输入文件包含一组测试案例。 对于每个测试案例,第一行输入一个n,代表该数组中数字的个数。 接下来的一行输入n个整数。代表数组中的n个数。 输出: 对应每个测试案例, 输入一行n个数字,代表调整后的数组。注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格。 样例输入: 5 1 2 3 4 5 样例输出: 1 3 5 2 4 #include <stdio.h> #include <stdlib.h> #define MAX 100000 void Merge(int arr1[], int len1, int arr2[], int len2){ int list[MAX]; int i = 0; int j = 0; int k = 0; while (i < len1 && arr1[i] % 2){ list[k++] = arr1[i++]; } while (j < len2 && arr2[j] % 2){ list[k++] = arr2[j++]; } while (i < len1){ list[k++] = arr1[i++]; } while (j < len2){ list[k++] = arr2[j++]; } for (i=0; i<len1+len2; ++i){ arr1[i] = list[i]; } } void MergeSort(int arr[], int len){ if (len > 1){ int len1 = len / 2; int len2 = len - len1; MergeSort (arr, len1); MergeSort (arr+len1, len2); Merge (arr, len1, arr+len1, len2); } } int main(void){ int n; int arr[MAX]; int i, j; int cnt; int tmp; while (scanf ("%d", &n) != EOF){ for (i=0; i<n; ++i){ scanf ("%d", &arr[i]); } MergeSort (arr, n); for (i=0; i<n; ++i){ printf ("%d", arr[i]); if (i != n-1) putchar (' '); } putchar ('\n'); } return 0; } 参考资料:归并排序

上一篇:J2EE开发 day1
下一篇:wubi安装ubuntu

相关文章

相关评论