算法笔记_049:奇偶数排序(Java)
目录
1 问题描述
给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
2 解决方案
2.1 一头一尾指针往中间扫描法
具体代码如下:
- package com.liuzhen.array_2;
- public class OddEvenSort {
- //解法1:一头一尾指针往中间扫描
- public void getOddEvenSort1(int[] A){
- if(A.length == 1)
- return;
- int begin = 0;
- int end = A.length - 1;
- while(begin < end){
- if(A[begin] % 2 == 1) //当A[begin]为奇数时
- begin++;
- else if(A[end] % 2 == 0) //当A[end] 为偶数时
- end--;
- else //当A[begin]不是奇数且A[end]不是偶数时
- swap(A,begin,end);
- }
- }
- //交换数组A的m位置和n位置上的值
- public void swap(int[] A,int m,int n){
- int temp = A[m];
- A[m] = A[n];
- A[n] = temp;
- }
- public static void main(String[] args){
- OddEvenSort test = new OddEvenSort();
- int[] A = {2,1,4,7,1,4,7,1,2,8,4,3,6,7,2,14,3,7,4,3,2,4,3,2,7};
- test.getOddEvenSort1(A);
- System.out.println("使用方法1:一头一尾指针往中间扫描结果:");
- for(int i = 0;i < A.length;i++)
- System.out.print(A[i]+" ");
- }
- }
运行结果:
- 使用方法1:一头一尾指针往中间扫描结果:
- 7 1 3 7 1 3 7 1 7 3 7 3 6 4 2 14 8 2 4 4 2 4 4 2 2
2.2 一前一后两个指针同时往后扫描法
具体代码如下:
- package com.liuzhen.array_2;
- public class OddEvenSort {
- //解法2:一前一后两指针往后扫描
- public void getOddEvenSort2(int[] A){
- if(A.length == 1)
- return;
- int origin = 0; //定义标准元素位置,最终结果是在该元素值的左边都是奇数,在该元素值的右边都是偶数
- int i = 0;
- for(int j = 1;j < A.length;j++){
- if(A[j] % 2 == 1){ //当A[j]为奇数时,右移一位,并交换A[i]和A[j]值,表明在i的左边均为奇数
- i++;
- swap(A,i,j);
- }
- }
- swap(A,i,origin);
- }
- //交换数组A的m位置和n位置上的值
- public void swap(int[] A,int m,int n){
- int temp = A[m];
- A[m] = A[n];
- A[n] = temp;
- }
- public static void main(String[] args){
- OddEvenSort test = new OddEvenSort();
- int[] B = {2,1,4,7,1,4,7,1,2,8,4,3,6,7,2,14,3,7,4,3,2,4,3,2,7};
- test.getOddEvenSort2(B);
- System.out.println("\n使用方法2:一前一后两指针往后扫描结果:");
- for(int i = 0;i < B.length;i++)
- System.out.print(B[i]+" ");
- }
- }
运行结果:
- 使用方法2:一前一后两指针往后扫描结果:
- 7 1 7 1 7 1 3 7 3 7 3 3 2 4 2 14 2 8 4 4 2 4 4 2 6
参考资料:
1.编程之法面试和算法心得 July著
算法笔记_049:奇偶数排序(Java)的更多相关文章
- 算法笔记_218:花朵数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数.例如:当N=3时,153就满足条件,因为 1^3 + 5^ ...
- 算法笔记_217:黑洞数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456.求这两个数字的差,得:41 ...
- Java实现奇偶数排序
1 问题描述 给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为O(n). 2 解决方案 2.1 一头一尾指针往中间扫描法 pack ...
- 算法笔记_138:稳定婚姻问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为稳定婚姻问题? 有一个男士的集合Y = {m1,m2,m3...,mn}和一个女士的计划X = {n1,n2,n3,...,nn}.每一个男士有 ...
- 算法笔记_137:二分图的最大匹配(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为二分图的最大匹配问题? 引用自百度百科: 首先得说明一下何为匹配: 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于 ...
- 算法笔记_228:信用卡号校验(Java)
目录 1 问题描述 2 解决方案 1 问题描述 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证 ...
- 算法笔记_178:历届试题 邮局(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流.为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己 ...
- 算法笔记_148:有向图欧拉回路求解(Java)
目录 1 问题描述 2 解决方案 1 问题描述 Description A catenym is a pair of words separated by a period such that t ...
- 算法笔记_132:最大流量问题(Java)
目录 1 问题描述 2 解决方案 1 问题描述 何为最大流量问题? 给定一个有向图,并为每一个顶点设定编号为0~n,现在求取从顶点0(PS:也可以称为源点)到顶点n(PS:也可以称为汇点)后,顶点 ...
随机推荐
- 洛谷P3690 [模板] Link Cut Tree [LCT]
题目传送门 Link Cut Tree 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代 ...
- Java 获取JVM内存和物理内存信息
package com.sysinfo; public class MonitorInfo { /** jvm可使用内存. */ private long totalMemory; /** jvm剩余 ...
- Luogu P2146 软件包管理器(树链剖分+线段树)
题意 给定\(n\)个软件包,每个软件包都有一个依赖软件包,安装一个软件包必须安装他的依赖软件包,卸载一个软件包必须先卸载所有依赖于它的软件包.给定\(m\)此操作,每次一个操作\(install/u ...
- Linux命令之chgrp
chgrp [选项] … GROUP FILE … chgrp [选项] … --reference=RFILE FILE … chgrp命令是用来改变文件的组所有权.将改变每一个FILE的所属组为G ...
- NetCore2.0 RozarPage自动生成增删改查
原文链接:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger 上面的只是原文 ...
- Problem D: 判断上否上三角矩阵
#include<stdio.h> int main() { ][],i,j; while(scanf("%d",&n)!=EOF) { ; //flag用来做 ...
- 8VC Venture Cup 2016 - Final Round (Div. 2 Edition) C. XOR Equation 数学
C. XOR Equation 题目连接: http://www.codeforces.com/contest/635/problem/C Description Two positive integ ...
- KNN算法实现手写数字
from numpy import * import operator from os import listdir def classify0(inX, dataSet, labels, k): d ...
- PHP温故知新(二)
2.安装和配置 安装这里要注意两点,是之前没有在意的: 1.将php.ini文件中的 cgi.fix_pathinfo设置为0 设置为0是为了解决一个安全漏洞,假如我们现在有这样一个URL:http: ...
- <摘录>linux 默认的include
#include <linux/module.h> 中的module.h默认是在哪个目录下呢?我在/usr/include/linux下并没有找到这个文件. 另外想问一下,不同内核版本的l ...