算法笔记_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:也可以称为汇点)后,顶点 ...
随机推荐
- POJ1845 Sumdiv [数论,逆元]
题目传送门 Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 26041 Accepted: 6430 Des ...
- 读书笔记(javascript 高级程序设计)
一. 数据类型: 1. undefined: 未声明和未初始化的变量,typeof 操作符返回的结果都是 undefined:(建议未初始化的变量进行显式赋值,这样当 typeof 返回 undefi ...
- 【斜率优化】Average
[UVa1451]Average 算法竞赛入门经典第8章8-9 ( P243 ) 题目大意:给定一个长度为N的01串,选择一个长度至少为L的连续子串,使序列平均值最大 (N<=100001) 题 ...
- BZOJ 1827 [Usaco2010 Mar]gather 奶牛大集会(树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1827 [题目大意] 给出一棵有点权和边权的树, 请确定一个点,使得每个点到这个点的距离 ...
- 【多重背包】CDOJ1691 这是一道比CCCC简单题经典的中档题
#include<cstdio> #include<algorithm> using namespace std; int n,V,w[110],c[110],a[110],f ...
- 防止xss攻击
<?php function _removeXSS($val) { $search = 'abcdefghijklmnopqrstuvwxyz'; $search .= 'ABCDEFGHIJK ...
- Codeforces Round #339 (Div. 1) B. Skills 暴力 二分
B. Skills 题目连接: http://www.codeforces.com/contest/613/problem/B Description Lesha plays the recently ...
- Codeforces Round #127 (Div. 1) B. Guess That Car! 扫描线
B. Guess That Car! 题目连接: http://codeforces.com/contest/201/problem/B Description A widely known amon ...
- iOS \U6b3e转字符串
-(NSString *)replaceUnicode:(NSString *)unicodeStr { NSString *tempStr1 = [unicodeStr stringByReplac ...
- mysql远程表/视图-应用
Date :20140213Auth: Jin参考http://blog.sina.com.cn/s/blog_757b0e130101erl5.htmlhttp://dev.mysql.com/do ...