`
chriszeng87
  • 浏览: 741216 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重新排列使数组的奇数在左边,偶数在右边,O(n)

J# 
阅读更多

题目:对任意数组,重新排列使数组的奇数在左边,偶数在右边,要求时间复杂度为O(n)。

 

例子: {1,2,3,4,5,6,7,8,9,10} -> {1,3,5,7,9,2,4,6,8,10}

 

思路:类似快速排序的处理,从左边扫描直到找到偶数,再从右边扫描直至找到奇数,再交换。

 

代码:

package algorithm.ms100;

public class Ex83 {
	private int[] a = {1,2,3,4,5,6,7,8,9,10};
	
	public void oddAndEven() {
		int i = 0;
		int j = a.length-1;
		int temp;
		while(true) {
			while(i<a.length && (a[i]%2 == 0)) {
				i++;
			}
			while(j>= 0 && (a[j]%2 == 1)) {
				j--;
			}
			if( i > j ) break;
			temp = a[i];
			a[i] = a[j];
			a[j] = temp;
		}
		
		for(i=0; i<a.length; i++) {
			System.out.print(a[i] + "  ");
		}
	}

	public static void main(String[] args) {
		Ex83 ex = new Ex83();
		ex.oddAndEven();

	}

}
 
0
1
分享到:
评论

相关推荐

    调整数组顺序使得奇数在偶数前面1

    标题中的“调整数组顺序使得奇数在偶数前面1”是指一种编程问题,目标是将一个整数数组重新排列,使得所有的奇数都出现在数组的前面,所有的偶数都出现在数组的后面。这个问题通常出现在算法练习中,例如LeetCode等...

    c++数据结构顺序表奇数在左偶数在右源码例子

    在这个特殊的例子中,我们要探讨的是如何通过C++实现一个顺序表,使得奇数元素位于左边,偶数元素位于右边。这涉及到数组的遍历、条件判断以及元素的重新排列。 首先,我们需要理解顺序表的基本操作,包括创建、...

    vb 随机数组 区分奇偶 并排列大小

    在给定的“vb 随机数组 区分奇偶 并排列大小”的场景中,我们需要创建一个随机数组,然后区分其中的奇数和偶数,并根据数值大小进行排序。下面将详细讲解如何实现这一过程。 首先,我们创建一个随机数组。在VB中,...

    ArraySorting:对数组排序(偶数项降序\奇数项升序)

    本篇文章将深入探讨如何实现一个特定的排序算法,即对数组进行排序,使得偶数索引位置的元素按照降序排列,而奇数索引位置的元素按照升序排列。这种排序规则在某些特定的数据处理场景下可能会非常有用。 首先,我们...

    蛇行数的输出&&和奇数放到偶数前的算法

    这个概念通常应用于数组中的元素分为奇数和偶数的情况,目标是让所有的奇数元素排在偶数元素之前,但保持原有顺序。具体实现时,可以使用两个指针,一个指向已排序区域的末尾,另一个从数组开头开始扫描。如果扫描到...

    Java算法实现调整数组顺序使奇数位于偶数之前的讲解

    假设我们有一个整数数组,我们需要设计一个函数来重新排列这个数组,使得所有的奇数都出现在数组的前半部分,而所有的偶数则排在后半部分。在此过程中,奇数与奇数、偶数与偶数之间的相对位置不能改变。这是一个对...

    按奇偶排序数组1

    它的目标是给定一个非负整数数组,重新排列数组,使得所有偶数元素出现在奇数元素之前。这个任务可以通过双指针技术来解决,这是一种在数组或链表中高效处理元素的常见方法。 首先,我们要理解题目需求。例如,对于...

    js代码-给定一个非负整数数组A,A中一半数是奇数,一半数是偶数,对数组进行排序,以便当A[i]为奇数时,i也是奇数;当A[i]为偶数时,i也是偶数。返回任何满足上述条件的数组作为答案。

    2. **重新排列**:接下来,我们需要将这两个子数组交错插入到一个新的数组中,以保证奇数出现在奇数索引,偶数出现在偶数索引。这个过程可以通过嵌套循环完成,外层循环按索引遍历新数组,内层循环按顺序从两个子...

    C++按照正态分布来排列整型数组元素

    如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置, 如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上, 然后再按从大到小的顺序,依次在第一个...

    时间复杂度为O(n)的找中位数算法源代码

    根据给定文件的信息,本文将深入探讨一种时间复杂度为O(n)的寻找中位数算法,并通过具体的源代码示例来分析其工作原理及实现细节。 ### 时间复杂度为O(n)的找中位数算法 #### 一、算法背景与目标 在计算机科学中...

    c++ 蛇形数组 倒三角

    在编程领域,蛇形数组(Spiral Matrix)是一种特殊的二维数组排列方式,它按照从左上角开始,先向右填充,然后向下,接着向左,最后向上这样的顺序不断循环,形成一种类似蛇行的路径。在ACM(国际大学生程序设计竞赛...

    蛇形矩阵(用二元数组实现)

    蛇形矩阵,也被称为“螺旋矩阵”,是一种特殊的矩阵排列方式,它从左上角开始,按照右、下、左、上的顺序依次填充元素。在编程领域,特别是在学习数组和循环结构时,蛇形矩阵是一个经典的练习题目,因为它涉及到对数...

    c代码-奇数节点和偶数节点分别排在一起_链表

    在本文中,我们将深入探讨如何使用C语言将链表中的奇数节点和偶数节点分开,使得它们在链表中交替排列。这个编程任务对于理解链表操作和数据结构的特性至关重要。 首先,我们需要理解链表的基本概念。链表是一种...

    使用顺序表实现奇偶排序

    注意,在`changelist`函数中,根据输入元素个数n是奇数还是偶数,分别处理奇数和偶数的存储。当n为奇数时,`arr1`会存储n/2+1个元素,`arr2`存储n/2个元素;当n为偶数时,两者都存储n/2个元素。最后,将这两个数组的...

    python-leetcode面试题解之寻找两个正序数组的中位数.zip

    中位数是将一组数值从小到大排列后处于中间位置的数,在奇数个数的情况下是中间那个数,偶数个数时则是中间两个数的平均值。 解决此问题的关键在于如何有效地找到两个有序数组的中位数,而无需实际合并它们,因为...

    java面试-leetcode面试java编程题解之第4题寻找两个正序数组的中位数-java题解.zip

    由于两个数组都是有序的,我们可以分别在两个数组上进行二分查找,找到一个分割点,使得左边的数都小于右边的数,并且左右两边的数数量相同或相差一。这样,分割点就是我们需要的中位数。这种方法的时间复杂度为O...

    寻找两个正序数组的中位数1

    这种方法的时间复杂度为O((m+n)log(m+n)),其中m和n分别是两个数组的长度。 4. **优化策略**: - **最小化操作次数**:我们可以通过合并数组并排序的方法找到中位数,但这种做法不是最优的。事实上,我们可以不用...

    c语言面试题之双指针按奇偶排序数组.zip

    针对"双指针按奇偶排序数组"的问题,我们需要一个包含整数的数组,并按照以下规则重新排列:所有偶数应该排在前面,所有奇数应该排在后面,但保持原有顺序不变(即相对位置)。例如,如果原数组为[1, 2, 3, 4, 5],...

    求魔方(奇数)

    在计算机编程领域,魔方是一种经典的三维智力玩具,它由多个可以旋转的小立方体组成,玩家需要通过转动各个面来恢复其初始颜色排列。在这个场景中,"求魔方(奇数)"指的是编写一个C语言程序,能够在控制台上模拟...

Global site tag (gtag.js) - Google Analytics