1.题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。

2.思路

  本题有两种解法,一种是不保证数组稳定性的解法,一种是保证数组稳定性的解法。数组的稳定性是指数组的奇数和奇数,偶数和偶数之间的相对位置不变。

  • 不要求稳定性的解法:

两个指针,p指向第一个元素,q指向最后一个元素。两个指针遍历数组,向后移动p使得p指向偶数,向前移动q使得q指向奇数,交换p和q的内容。指针p位于指针q后面时,结束遍历。举例:12345->15342。

  • 要求稳定性的解法:

借鉴冒泡排序思想,每次确定一个位置。

3.code

#include <iostream>
#include <vector>
using namespace std; // 稳定的解法
class Solution_stable{
public:
void ReArray(vector<int > &array)
{
// 特殊输入
if(array.size() == 0 || array.size() == 1)
return; // 冒泡排序
for(int i = 0;i < array.size();++i)
for(int j = array.size()-1;j>i;--j)
if(array[j]%2 == 1 && array[j-1]%2 ==0)
swap(array[j],array[j-1]);
}
}; // 不稳定的解法
class Solution_no_stable{
public:
void ReArray(int *array2,int length)
{
// 特殊输入
if(array2 == nullptr || length == 0)
return; // 指针遍历数组
int *pLeft = array2;
int *pRight = array2 + length-1; while(pLeft<pRight)
{
// 向后移动pLeft,直到指向偶数
while(pLeft<pRight && *pLeft %2 == 1)
pLeft++; // 向前移动pRight,直到指向奇数
while(pLeft<pRight && *pRight %2 == 0)
pRight--; // 奇偶数交换
if(pLeft < pRight)
swap(*pLeft,*pRight);
}
}
};
int main()
{
// 稳定的解法
cout<<"稳定的解法"<<endl;
Solution_stable solution1;
vector<int> array = {1,2,3,4,5,6,7,8,9,10};
solution1.ReArray(array); for(int i = 0;i<array.size();++i)
cout<<array[i]<<endl; // 不稳定的解法
cout<<"不稳定的解法"<<endl;
Solution_no_stable solution2;
int length = 10;
int array2[10] = {1,2,3,4,5,6,7,8,9,10};
solution2.ReArray(array2,length); for(int i = 0;i<length;i++)
cout<<array2[i]<<endl;
return 0;

4.复杂度

  时间复杂度为O(n2)

5.测试用例

  • 特殊输入:空数组、含一个元素的数组
  • 功能测试:奇偶交替、全部偶数在全部奇数之前、全部奇数在全部偶数之前

【剑指offer-21】调整数组顺序使奇数位于偶数前面,C++实现(冒泡排序)的更多相关文章

  1. 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...

  2. 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...

  3. 剑指Offer:调整数组顺序使奇数位于偶数前面【21】

    剑指Offer:调整数组顺序使奇数位于偶数前面[21] 题目描述 输入一个整形数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 解题分析 使用插 ...

  4. 剑指offer:调整数组顺序使奇数位于偶数前面

    题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...

  5. 【剑指Offer】调整数组顺序使奇数位于偶数前面 解题报告(Python)

    [牛客网]调整数组顺序使奇数位于偶数前面 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc4 ...

  6. 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】

    来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...

  7. Go语言实现:【剑指offer】调整数组顺序使奇数位于偶数前面

    该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和 ...

  8. 剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

    题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...

  9. 剑指Offer 13. 调整数组顺序使奇数位于偶数前面 (数组)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目地址 https ...

  10. 【剑指offer】调整数组顺序使奇数位于偶数前面

    一.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路: 用 ...

随机推荐

  1. Axis.Labels.CustomSize

    tChart1.Axes.Bottom.Labels.CustomSize = ; //Changes spacing occupied by the axis labels between the ...

  2. Feign PathVariable annotation was empty on param 0.

    使用Feign的时候,如果参数中带有 @PathVariable形式的参数,则要用value=""标明对应的参数,否则会抛出IllegalStateException异常 如 @P ...

  3. 解题报告:poj1321 棋盘问题 - 搜索

    棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 51262 Accepted: 24785 Description 在一 ...

  4. PHP函数前面添加@的作用

    @是PHP提供的错误信息屏蔽的专用符号. 比如在一个函数前使用@ @mysql_query 不会出现Warning, 而原来mysql_query 在遇到错误时会在页面上访提示Warning. @是可 ...

  5. [spring]Bean注入——使用注解代替xml配置

    使用注解编程,主要是为了替代xml文件,使开发更加快速. 一.使用注解前提: <?xml version="1.0" encoding="UTF-8"?& ...

  6. 全--教程API, gem 'rest-client'(用于发简单请求); 请求测试;

    安装:rest-client4400✨ gem install rest-client 一个简单的HTTP和REST client for Ruby. 可以用它来发HTTP请求 基本用法: requi ...

  7. confluence wiki 破解安装操作流程

    准备postgres数据库安装 步骤1:命令: docker pull postgres 步骤2:安装: docker run --name postgresdb -p 5432:5432 -e PO ...

  8. 清华大学 pip 源

    pypi 镜像使用帮助 pypi 镜像每 5 分钟同步一次. 临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-pac ...

  9. js排序算法05——快速排序

    终于到了传说中的快速排序算法了,快速排序的思想和归并排序一样,都是采用分治思想,不同之处在于归并每次将数组一分为二,最后将小的数组进行比较,合并为大数组.快排是每次找一个主元,也就是基准数,按照这个基 ...

  10. java程序设计基础篇 复习笔记 第五单元

    1. method header: modifier, return value type, method signature(method name, parameter) method body ...