题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
分析
最简单的思路就是从头开始遍历数据,如果遇到一个偶数,则将该位置的偶数取出,然后把位于该数字后边的所有数据都往前移动一位,然后将取出来的数字放到最后一位。此方法时间复杂度为O(n2)。显示不是最高效的。
高效的方法是用两个指针,分别指向数组的开始和结尾。然后指向开始的指针向前编写直到遇到第一个偶数,然后停止;指向结尾的指针同时移动直到找到第一个奇数,然后停止移动指针。这时候交换两个指针的内容,并且继续之前的过程,直到两个指针相遇。
实现
1 | #include "ReOrderOddEven.h" |
测试
1 | int number[] = {1,2,3,4,5,6,4,3,4,56,7,8,33,22,121,42}; |