数组排序,奇数在前,偶数在后(二)
2017-04-14 13:58
507 查看
一个无序整数数组,对它排序,使其前半部分都为奇数有序,后半部分为偶数有序。
第二种解法:
基本思想:先对数组进行分割,分割为两部分:奇数序列和偶数序列,
再利用任何一种排序算法排序。
注:
分割可参考快速快速排序分割算法
算法时间复杂度O(n*logn) (使用快速排序)
第二种解法:
基本思想:先对数组进行分割,分割为两部分:奇数序列和偶数序列,
再利用任何一种排序算法排序。
#include <iostream> #include <algorithm> using namespace std; void PrintArr(int *arr, int n) { for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; } int Partition(int *arr, int n) { int odd = 0; int even = n-1; while (odd < even) { while (arr[odd] % 2 != 0 && odd < even) { odd++; } while (arr[even]% 2 == 0 && odd < even) { even--; } // swap int temp = arr[odd]; arr[odd] = arr[even]; arr[even] = temp; } return odd; } void OESort1(int *arr, int n) { int pivot = Partition(arr, n); std::sort(arr, arr + pivot); std::sort(arr + pivot, arr + n); } int main(int argc, char *argv[]) { int arr[] = {101, 2, 3, 5, 8, 12, 33, 6, 7}; OESort1(arr, sizeof(arr) / sizeof(arr[0])); PrintArr(arr, sizeof(arr) / sizeof(arr[0])); return 0; }
注:
分割可参考快速快速排序分割算法
算法时间复杂度O(n*logn) (使用快速排序)
相关文章推荐
- 数组排序,奇数在前,偶数在后
- 数组:奇数在前,偶数在后,要求顺序不变
- 有序数组:>奇数在前 偶数在后
- 整数数组,奇数在前,偶数在后
- java排序,随机生成一个数组,对其进行排序,偶数在前奇数在后,偶数从小到大排,奇数从大到小排
- 数组排列(奇数在前,偶数在后)
- 剑指offer-----使数组中所有奇数在前,所有偶数在后,并保持相对位置不变
- 华为招聘机试整理14:数组奇数偶数排序
- 数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析
- 数组排序后保证正数之间和负数之间的相对位置不变 负数在前 正数在后
- 传入一个数组进行排列,奇数在前升序,偶数在后降序,在程序执行中不能开辟新数组空间
- 2015调整数组的顺序使奇数位于偶数的前面(不用考虑排序)
- 华为:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数
- 快速排序(一个数组先做偶数排序后做奇数排序)
- 快速排序+调整数组顺序使奇数位于偶数前面
- 调整数组元素顺序,奇数在前,偶数在后
- (数组)数组排序,使所有奇数在左边,所有偶数在右边
- 华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置
- 创建一维数组,长度为20,元素索引值为索引的二倍,奇数为负偶数为正,然后对数组排序
- 数组------奇数偶数排序