思路:
* 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("=================================================");
}
												

有多个正整数存放在数组中,编写一个函数要求偶数在左边由小到大顺序放置,奇数在右边,也是由小到大顺序放置,Java实现的更多相关文章

  1. 已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数

    import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:04 * @description ...

  2. 【C语言】在两个数成对出现的数组中找到一个单独的数。

    //在两个数成对出现的数组中找到一个单独的数.比如{1,2,3.3,1,4.2},即找出4 #include <stdio.h> int find(int arr[], int len) ...

  3. [jstips]向数组中插入一个元素

    向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...

  4. 用JS编写一个函数,返回数组中重复出现过的元素

    用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: , , , , , , , ]; var getRepeat = function (arr) { var obj = {}; , le ...

  5. C#如何删除数组中的一个元素

    C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个 ...

  6. 数组:获取数组中最后一个数据end()函数

    今天来学习一下end()函数 1.案例:直接获取数组中最后一个数据 代码部分 结果: 2.案例:从url中获取最后一个数据 代码部分: 结果: 总结: 1.有时候我们需要去获取数据库中,id最大的那个 ...

  7. 在ubuntu linux 中编写一个自己的python脚本

    在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pmpy为例(play music python),为了区别之前说的bash脚本添加了py后缀),来 ...

  8. 在ubuntu linux 中编写一个自己的bash脚本

    在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pm为例(play music)),来实现音乐的播放.注:本人ununut中安装了audacious ...

  9. /编写一个函数,要求从给定的向量A中删除元素值在x到y之间的所有元素(向量要求各个元素之间不能有间断), 函数原型为int del(int A ,int n , int x , int y),其中n为输入向量的维数,返回值为删除元素后的维数

    /** * @author:(LiberHome) * @date:Created in 2019/2/28 19:39 * @description: * @version:$ */ /* 编写一个 ...

随机推荐

  1. angualrjs 配置超时时间

    timeout 1 本想通过$httpProvider的defaults属性配置timeout时间, defaults中没有这个属性. https://docs.angularjs.org/api/n ...

  2. “5W1H”带你来学习JavaScript

    上次的设计模式讲课,从中学习到了非常多.不仅是技术上,更重要的是怎样来学习.我们学习的技术.科技的更新速度超过我们的想象,对于我们这个有生命年限的个体,怎样可以在有生之年可以让自己立足于科技的不败浪潮 ...

  3. 用VSCode写Vue要用到的配置

    [本文出自天外归云的博客园] 文件-首选项-设置-打开settings.json-用户设置区域填写: { "workbench.colorTheme": "Monokai ...

  4. mybatis generator 为数据库保留字段 转义

    为order 添加转义符号“ ` ” `order` <property name="autoDelimitKeywords" value="true"& ...

  5. webstrom IDE 激活

    2017.2.27更新 选择“license server” 输入:http://idea.imsxm.com/ 2016.2.2 版本的破解方式: 安装以后,打开软件会弹出一个对话框:选择“lice ...

  6. Failed to execute 'write' on 'Document'动态载入的js不能执行write

    统计代码一般都是直接一个标签,插入js,标签放在哪里,统计图表就放在哪里! 我现在是稍微改了一下,我自己加了一点js,在页面所有元素都加载完成之后我再动态的把统计js插入到我需要的地方. 统计代码的s ...

  7. hive建表报错:Specified key was too long; max key length is 767 bytes,hadoophive

    情况描述 Hive建表时报错,元数据存储在mysql中. 报错信息 如下: FAILED: Execution Error, bytes com.mysql.jdbc.exceptions.jdbc4 ...

  8. 【转】WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: 自定义Window窗体样式: 基于自定义窗体实现自定义MessageB ...

  9. Java多线程并发编程一览笔录

    线程是什么? 线程是进程中独立运行的子任务. 创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法 方式二:声明实现 Runnable 接口的类.该 ...

  10. SQL开头quoted和ansiNULL

    “QUOTED_IDENTIFIER” 当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔. 当 SET QUOTED_IDENTIFIER ...