题目:对任意数组,重新排列使数组的奇数在左边,偶数在右边,要求时间复杂度为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();
}
}
分享到:
相关推荐
标题中的“调整数组顺序使得奇数在偶数前面1”是指一种编程问题,目标是将一个整数数组重新排列,使得所有的奇数都出现在数组的前面,所有的偶数都出现在数组的后面。这个问题通常出现在算法练习中,例如LeetCode等...
在这个特殊的例子中,我们要探讨的是如何通过C++实现一个顺序表,使得奇数元素位于左边,偶数元素位于右边。这涉及到数组的遍历、条件判断以及元素的重新排列。 首先,我们需要理解顺序表的基本操作,包括创建、...
在给定的“vb 随机数组 区分奇偶 并排列大小”的场景中,我们需要创建一个随机数组,然后区分其中的奇数和偶数,并根据数值大小进行排序。下面将详细讲解如何实现这一过程。 首先,我们创建一个随机数组。在VB中,...
本篇文章将深入探讨如何实现一个特定的排序算法,即对数组进行排序,使得偶数索引位置的元素按照降序排列,而奇数索引位置的元素按照升序排列。这种排序规则在某些特定的数据处理场景下可能会非常有用。 首先,我们...
这个概念通常应用于数组中的元素分为奇数和偶数的情况,目标是让所有的奇数元素排在偶数元素之前,但保持原有顺序。具体实现时,可以使用两个指针,一个指向已排序区域的末尾,另一个从数组开头开始扫描。如果扫描到...
假设我们有一个整数数组,我们需要设计一个函数来重新排列这个数组,使得所有的奇数都出现在数组的前半部分,而所有的偶数则排在后半部分。在此过程中,奇数与奇数、偶数与偶数之间的相对位置不能改变。这是一个对...
它的目标是给定一个非负整数数组,重新排列数组,使得所有偶数元素出现在奇数元素之前。这个任务可以通过双指针技术来解决,这是一种在数组或链表中高效处理元素的常见方法。 首先,我们要理解题目需求。例如,对于...
2. **重新排列**:接下来,我们需要将这两个子数组交错插入到一个新的数组中,以保证奇数出现在奇数索引,偶数出现在偶数索引。这个过程可以通过嵌套循环完成,外层循环按索引遍历新数组,内层循环按顺序从两个子...
如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置, 如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上, 然后再按从大到小的顺序,依次在第一个...
根据给定文件的信息,本文将深入探讨一种时间复杂度为O(n)的寻找中位数算法,并通过具体的源代码示例来分析其工作原理及实现细节。 ### 时间复杂度为O(n)的找中位数算法 #### 一、算法背景与目标 在计算机科学中...
在编程领域,蛇形数组(Spiral Matrix)是一种特殊的二维数组排列方式,它按照从左上角开始,先向右填充,然后向下,接着向左,最后向上这样的顺序不断循环,形成一种类似蛇行的路径。在ACM(国际大学生程序设计竞赛...
蛇形矩阵,也被称为“螺旋矩阵”,是一种特殊的矩阵排列方式,它从左上角开始,按照右、下、左、上的顺序依次填充元素。在编程领域,特别是在学习数组和循环结构时,蛇形矩阵是一个经典的练习题目,因为它涉及到对数...
在本文中,我们将深入探讨如何使用C语言将链表中的奇数节点和偶数节点分开,使得它们在链表中交替排列。这个编程任务对于理解链表操作和数据结构的特性至关重要。 首先,我们需要理解链表的基本概念。链表是一种...
注意,在`changelist`函数中,根据输入元素个数n是奇数还是偶数,分别处理奇数和偶数的存储。当n为奇数时,`arr1`会存储n/2+1个元素,`arr2`存储n/2个元素;当n为偶数时,两者都存储n/2个元素。最后,将这两个数组的...
中位数是将一组数值从小到大排列后处于中间位置的数,在奇数个数的情况下是中间那个数,偶数个数时则是中间两个数的平均值。 解决此问题的关键在于如何有效地找到两个有序数组的中位数,而无需实际合并它们,因为...
由于两个数组都是有序的,我们可以分别在两个数组上进行二分查找,找到一个分割点,使得左边的数都小于右边的数,并且左右两边的数数量相同或相差一。这样,分割点就是我们需要的中位数。这种方法的时间复杂度为O...
这种方法的时间复杂度为O((m+n)log(m+n)),其中m和n分别是两个数组的长度。 4. **优化策略**: - **最小化操作次数**:我们可以通过合并数组并排序的方法找到中位数,但这种做法不是最优的。事实上,我们可以不用...
针对"双指针按奇偶排序数组"的问题,我们需要一个包含整数的数组,并按照以下规则重新排列:所有偶数应该排在前面,所有奇数应该排在后面,但保持原有顺序不变(即相对位置)。例如,如果原数组为[1, 2, 3, 4, 5],...
在计算机编程领域,魔方是一种经典的三维智力玩具,它由多个可以旋转的小立方体组成,玩家需要通过转动各个面来恢复其初始颜色排列。在这个场景中,"求魔方(奇数)"指的是编写一个C语言程序,能够在控制台上模拟...