【剑指offer-21】调整数组顺序使奇数位于偶数前面,C++实现(冒泡排序)
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++实现(冒泡排序)的更多相关文章
- 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...
- 【Java】 剑指offer(21) 调整数组顺序使奇数位于偶数前面
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇 ...
- 剑指Offer:调整数组顺序使奇数位于偶数前面【21】
剑指Offer:调整数组顺序使奇数位于偶数前面[21] 题目描述 输入一个整形数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 解题分析 使用插 ...
- 剑指offer:调整数组顺序使奇数位于偶数前面
题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 分析 事实上,这个题比较简单,很多种方式都可以实现,但是其时间复杂度或空间复 ...
- 【剑指Offer】调整数组顺序使奇数位于偶数前面 解题报告(Python)
[牛客网]调整数组顺序使奇数位于偶数前面 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/beb5aa231adc4 ...
- 剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得 ...
- Go语言实现:【剑指offer】调整数组顺序使奇数位于偶数前面
该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和 ...
- 剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输 ...
- 剑指Offer 13. 调整数组顺序使奇数位于偶数前面 (数组)
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目地址 https ...
- 【剑指offer】调整数组顺序使奇数位于偶数前面
一.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 二.思路: 用 ...
随机推荐
- 配置ssh秘钥登陆
环境2台linux服务器:node1 192.168.X.234 node2 192.168.X.242 演示用node1无密码登陆node ...
- web platform installer
下载链接 https://www.microsoft.com/web/downloads/platform.aspx 默认的安装路径 C:\Program Files\Microsoft\Web Pl ...
- Javascript 十移跳转页面
<srcipty> var t = 10; function openwin(){ t -= 1; if( t==0){ location.href='prototype.html'; } ...
- 日期插件My97DatePicker
因为项目中需要选中日期,所以就找到了My97DatePicker这个插件,用法非常的简单,但是因为各个公司的要求不同,我们公司使用js拼代码,然后渲染到页面上的,所以遇到了一点问题… 1.My97Da ...
- 基于哈夫曼编码的压缩解压程序(C 语言)
这个程序是研一上学期的课程大作业.当时,跨专业的我只有一点 C 语言和数据结构基础,为此,我查阅了不少资料,再加上自己的思考和分析,实现后不断调试.测试和完善,耗时一周左右,在 2012/11/19 ...
- Nginx 启动报错 “/var/run/nginx/nginx.pid" failed”
问题: 重启虚拟机后,再次重启nginx会报错: open() "/var/run/nginx/nginx.pid" failed (2: No such file or dire ...
- [nodejs]npm国内npm安装nodejs modules终极解决方案
此方案用于设置代理和修改镜像地址都不能解决问题使用 1.npm root 确认node模块的根文件夹,全局要加-g. osx同样是此命令,先清除缓存. npm cache clean C:\Users ...
- [nodejs]国内npm安装nodejs modules失败的几个解决方案
使用npm安装node模块时经常有卡住安装失败的情况,如图所示.原因在于npm服务器在美国,还有就是某强大的防火墙作用.这样的问题导致很多新手放弃使用node,几乎每天都有新手再问这个问题.现在分享一 ...
- [Eclipse]Eclipse快捷键
查看一个方法被谁调用:选中方法名字,Search-->Reference-->Workspace
- URAL 1830 Help in the RNOS 思路,读题 难度:1
http://acm.timus.ru/problem.aspx?space=1&num=1830 这道题需要理解题目操作的意思, 要更改第i位的状态,第i-1位必须激活为1,0-i-2位必须 ...