数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析

2016-02-19 09:20 7 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是数组重排序(如何将所有奇数都放在所有偶数前面)的深入分析,一起来学习了解下吧!

【 tulaoshi.com - 编程语言 】

这里介绍一种高效的能在O(n)时间复杂度内完成的算法。
核心思想是:定义两个指针,一个指针A从前往后扫描,一个指针B从后往前扫描。指针A扫描到偶数暂停,指针B扫描到奇数暂停,然后交换着两个数,交换之后继续如上述扫描和交换,直到指针A和指针B重合停止。
这个算法的Java代码如下:
代码如下:

package Reorder;
public class Reorder {

 public static void main(String[] args) {
  int[] list = { 1, 2, 3, 4, 5, 7, 9, 11 };
  reorderOddEven(list);
 }
 public static void reorderOddEven(int[] list) {
  int length = list.length;
  for (int i = 0; i length; i++) {
   System.out.print(list[i] + " ");
  }
  System.out.print("n");
  int begin = 0;
  int end = length - 1;
  while (begin end) {
   while (begin end && (list[begin] & 0x1) != 0)
    begin++;
   while (begin end && (list[end] & 0x1) == 0)
    end--;
   if (begin end) {
    int temp = list[begin];
    list[begin] = list[end];
    list[end] = temp;
   }
  }
  for (int i = 0; i length; i++) {
   System.out.print(list[i] + " ");
  }
 }
}

来源:https://www.tulaoshi.com/n/20160219/1590398.html

延伸阅读
在 Android 中,多数情况下每个程序都是在各自独立的 Linux 进程中运行的。当一个程序或其某些部分被请求时,它的进程就“出生”了;当这个程序没有必要再运行下去且系统需要回收这个进程的内存用于其他程序时,这个 进程就“死亡”了。可以看出,Android 程序的生命周期是由系统控制而非程序自身直接控制。这和我们编写桌面应用程序时的思维有...
标签: 妊娠 分娩方式
妊娠并子宫肌瘤的分娩方式 网友:丁医生你好!我现在孕36周整,子宫左前壁有一大(4cm)一小(2cm)2个,现在不知道该生还是剖腹产,很矛盾,请给我答复好吗 ? 丁新:其实的发生率是很高的,妊娠合并也是比较常见的一种疾病,如果子宫肌瘤没有影响胎头的下降,子宫肌瘤不是太大,没有发生变性,应该说不会影响你的分娩方式的选tulaos...
提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那...
首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,示意图如下,其中包含编译、链接和签名等: (1)使用aapt工具生成R.java文件 可以先通过搭建好的Eclipse开发环境创建一个未编译的Android工程,记的一定要将Eclipse中Project菜单下的Build Automatically选项前面的对勾去掉后再去创建工程。创建好未编译的工...
Java 内存划分:     在Java内存分配中,java将内存分为:方法区,堆,虚拟机栈,本地方法栈,程序计数器。其中方法区和堆对于所有线程共享,而虚拟机栈和本地方法栈还有程序计数器对于线程隔离的。每个区域都有各自的创建和销毁时间。 程序计数器:     作用是当前线程所执行的字节吗的行号指示器。Java...

经验教程

947

收藏

29
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部