将数组的奇数放在左边,偶数放在右边

/**
 *  使用两个指针i和j,初始化均为0。然后j往后遍历,若遇到了奇数,则将 A[j] 和 A[i] 交换位置,同时i自增1,这样操作下来,同样可以将所有的偶数都放在奇数前面
 *
 */
public class SortArrayByParity {

    public static void main(String[] args) {

        int [] arr = new int[] {2,3,4,5,6,7,8,9,10,12,14,15,16,17};
        sort(arr);
        Arrays.stream(arr).forEach(s -> System.out.print(s+ " "));
    }

    public static void sort(int [] arr) {
        int i = 0 ;
        for(int j = 0 ; j < arr.length ; j ++) {
            if(arr[j] % 2 == 1 ) {
                swap(j,i,arr);
                i++;
            }
        }
    }

    public static  void swap(int a , int b , int [] arr) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}

原文地址:https://www.cnblogs.com/moris5013/p/11805110.html

时间: 2024-10-10 03:42:22

将数组的奇数放在左边,偶数放在右边的相关文章

案例:把分拣奇偶数的程序用泛型实现。int[] nums={1,2,3,4,5,6,7,8,9};奇数在左边 偶数在右边

//案例:把分拣奇偶数的程序用泛型实现.int[] nums={1,2,3,4,5,6,7,8,9};奇数在左边 偶数在右边 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; List<int> listJi = new List<int>(); List<int> listOu = new List<int>(); for (int i = 0; i < nums.Length; i++) { if (nums[

剑指offer——使数组中奇数全部位于偶数前面

从前往后找所要交换的两个数 void ReOrder(int* arr, int size) {     if (arr == NULL || size <= 1)return;     int i = 0,j = 0;     while (i < size&&j < size){         while (i < size && ((arr[i] & 0x01) == 1)){//找偶数             ++i;       

用C语言编程,实现调整数组,使奇数全部位于偶数前边,

函数要求实现功能:调整数组使奇数全部都位于偶数前面. 要求: 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思考,要想实现此功能,首先对函数数组进行遍历,从两头进行,一个从前向后查看数组元素是否为奇数,一个从后向前查看数组元素是否为偶数,如果前为偶,后为奇则进行调换! 程序如下: /* **2.调整数组使奇数全部都位于偶数前面. ** 题目: **输入一个整数数组,实现一个函数, **来调整该数组中数字的顺序使得数组

剑指offer (14) 重组数组使得 奇数在偶数前

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分 解题分析: 其实就是快速排序的思想. 回想一下快速排序的Partition划分函数,每执行一次划分操作,我们就可以 确定中轴值的最终位置, 也就是 <= 中轴值的所有元素都在 其左边,所有 > 中轴值的元素都在 其右边 我们可以从此获得启发,现在题目要求是 所有奇数在左边,所有偶数在右边, 模拟快速排序的划分操作,我们选取一个 偶数,然后执行划分操作, 执行完

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。

10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中.例如123放在num[0]中,456放在num[1]中--统计共有多少个整数,并输出这些数. #include <stdio.h> int main(){ void search(char * parr, int * pnum); char arr[100],* parr; int num[30],* pnum; parr=arr;

【算法】 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变

题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变. 思想:从数组开头开始遍历所有数组.当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体:当碰到奇数时,将这个奇数与前面的偶数整体对调位置. #include <stdio.h> #include <stdlib.h> void nuo(int *a,int j,int nu)                     //将奇数与前面所有偶数调换位置

让数组中奇数位于偶数的前面

#include <iostream> using namespace std; void print(int *a,int n){ if(a==NULL || n<=0) return; for(int i=0;i<n;i++){ cout<<a[i]<<" "; } cout<<endl; } //快排的思想 int Partition(int *a,int left,int right){ int l=left; int

【C语言】调整数组使奇数所有都位于偶数前面

//调整数组使奇数全部都位于偶数前面. //输入一个整数数组.实现一个函数.来调整该数组中数字的顺序使得数组中全部的奇数位于数组的前半部分,全部偶数位于数组的后半部分 #include <stdio.h> void Adjust(int arr[],int len) { int i, j; for (i = 0; i < len; i++) { if ((arr[i]%2)==0) for (j = i + 1; j < len; j++) { int temp; if ((arr

【c语言】调整数组使奇数全部都位于偶数前面

// 调整数组使奇数全部都位于偶数前面 // 输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, // 所有偶数位于数组的后半部分. #include <stdio.h> #include <assert.h> void johh(int *p, int len) { int *q = p + len - 1; int temp; assert(p != NULL); while (p < q) { while ((*p &

将数组的奇数放到偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分 思路: 声明两个指针,一个指向该数组的头,另一个指向该数组的尾,将头指针指向的第一个偶数和尾指针指向的第一个奇数交换即可,直到头指针大于尾指针跳出循环. 代码如下: void tiaozheng(int *data,unsigned int length) { if(data==NULL||length<=0) throw exception("参数错误!&qu