思路:
* 1.首先分左右
* 2.分好再排序(左边和右边都单独排序)
第一步:分左右
可得注意了:
大体思路最先是从两头出发分成4种情况讨论(左or右,奇数or偶数)循环处理,出口是双层的嵌套循环(外面的循环条件可能已经失效)
所以以后凡是遇到嵌套循环一定要记得注意一下是否需要在内层加上外层判断条件(记不住可以自己慢慢debug)
public class page02 {
public static void main(String[] args) {
int[] nums = {1, 2, 49, 1, 52, 804, 0, 3, 76, 26, 2, 1, 2};
devide(nums);
range(nums);
show(nums);
}
private static void devide(int[] numbers) {
int a = 0;
int b = numbers.length - 1;
while (a < b) {
while (numbers[a] % 2 == 0 && numbers[b] % 2 == 0 && a < b) {
//左右都是偶数
a++;
}
while (numbers[a] % 2 != 0 && numbers[b] % 2 != 0 && a < b) {
//左右都是奇数
b--;
}
while (numbers[a] % 2 != 0 && numbers[b] % 2 == 0 && a < b) {
//左边是奇数,右边是偶数
//左边是偶数,右边是奇数
int temp;
temp = numbers[a];
numbers[a] = numbers[b];
numbers[b] = temp;
}
while (numbers[a] % 2 == 0 && numbers[b] % 2 != 0 && a < b) {
//左边是偶数,右边是奇数
a++;
b--;
}
}
}
第二步:排序
又是循环嵌套,除了注意外部(比如处理偶数这一边的排序的时候一定要加上&& (i < count)
)条件外,这里格外需要注意的就是初始条件了(比如处理偶数这一边的排序的初始条件的时候i = count - 1):
/*直接插入排序*/
private static void range(int[] arr) {
int i = 0;
int count = 0;
while (arr[i] % 2 == 0) {
/*计算出偶数的个数*/
count = count + 1;
i++;
}
/*对所有偶数进行排序*/
for (i = 1; i < count; i++) {
for (int j = 0; (j < i) && (i < count); j++) {
if (arr[i] < arr[j]) {/*后面的更小*/
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
/*对剩下的奇数排序*/
for (i = count - 1; i < arr.length; i++) {
for (int j = count; j < i; j++) {
if (arr[i] < arr[j]) {/*后面的更小*/
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
最后打印输出:
private static void show(int[] numbers) {
for (int i = 0; i < numbers.length; i++) {
System.out.println(" " + numbers[i]);
}
System.out.println("=================================================");
}
已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...
【C语言】在两个数成对出现的数组中找到一个单独的数。
//在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include int find(int arr[], int len) ...
[jstips]向数组中插入一个元素
向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...
用JS编写一个函数,返回数组中重复出现过的元素
用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...
C#如何删除数组中的一个元素
C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个 ...
数组:获取数组中最后一个数据end()函数
今天来学习一下end()函数 1.案例:直接获取数组中最后一个数据 代码部分 结果: 2.案例:从url中获取最后一个数据 代码部分: 结果: 总结: 1.有时候我们需要去获取数据库中,id最大的那个 ...
在ubuntu linux 中编写一个自己的python脚本
在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pmpy为例(play music python),为了区别之前说的bash脚本添加了py后缀),来 ...
在ubuntu linux 中编写一个自己的bash脚本
在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pm为例(play music)),来实现音乐的播放.注:本人ununut中安装了audacious ...
随机推荐
有关windows系统的EXE和DLL文件说法错误
正确答案: B C 你的答案: C (错误) EXE和DLL文件都是PE文件 EXE不能有导出函数,DLL可以有导出函数 EXE有x86和x64之分,则DLL没有 EXE可以单独运行,DLL则不行 ...
一、javaSE总结
1.变量与常量区别: 常量:是在程序中的不会变化的数据. 变量:其实就是内存中的一个存储空间,用于储存常量数据 ,方便运算,因为有些数据不确定,变量空间可以重复使用. 2.变量空间的开辟条件:数据类型 ...
using(){},Close(),Dispose()的区别
//用Close(),Dispose()方式关闭连接 string connString = "Data Source=(local);Initial Catalog=Linq;Integr ...
CART剪枝
与上篇文章中提到的ID3算法和C4.5算法类似,CART算法也是一种决策树分类算法.CART分类回归树算法的本质也是对数据进行分类的,最终数据的表现形式也是以树形的模式展现的,CART与ID3,C4. ...
String、StringBuffer与StringBuilder差分
的位置不言而喻.那么他们究竟有什么优缺点,究竟什么时候该用谁呢?以下我们从以下几点说明一下 1.三者在运行速度方面的比較:StringBuilder > StringBuffer > ...
用border做一个移动端常见的返回按钮
第一步 .hs1{ float: left; .mt(.25rem); .ml(.12rem); width: .3rem; height: .3rem; border-top: 2px solid ...
c# 图片转二进制/字符串 二进制/字符串反转成图片
protected void Button1_Click(object sender, EventArgs e) { //图片转二进制 byte[] imageByte = GetPictureDat ...
看得懂的区块链,看不清的ICO人心
比特币又开始下跌了,是狂欢尽头还是又一波调整,无从得知,背后的乱象会让监管者继续心烦,而这乱象对我来说,有时候会有些心寒. 你说我怎么可能想到,我一个写程序的人,突然有一天会发现,朋友圈里有一些搞技术 ...
BZOJ 3993: [SDOI2015]星际战争 [二分答案 二分图]
3993: [SDOI2015]星际战争 题意:略 R1D2T1考了裸二分答案+二分图最大匹配... #include #include ...
Intellij Idea识别Java Web项目
使用maven生成一个Java项目,手动添加相应的web目录WEB_INF,web.xml等,此时idea没有自动识别为web项目,此时编辑web.xml文件会出现一些不该出现的错误,需要做的就是让i ...