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

题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变。

思想:从数组开头开始遍历所有数组。当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体;当碰到奇数时,将这个奇数与前面的偶数整体对调位置。

#include <stdio.h>
#include <stdlib.h>

void nuo(int *a,int j,int nu)                     //将奇数与前面所有偶数调换位置
{
        int b=a[j];
        while(nu--){
                a[j]=a[j-1];
                j--;
                   }
        a[j]=b;
}

int main()
{
        int* a;
        int i = 0 ;
        int j = 0 ;
        int nu= 0 ;
        printf("请输入数组个数:\n");
	scanf("%d",&i);
	a=malloc(sizeof(int)*i);
	printf("请输入数组,之间用逗号隔开:\n");
	for(;j<i;j++){
		scanf("%d,",&a[j]);
	}
	j=0;
        while(i!=j){
                if(a[j]%2==1){                   //这个数为奇数
                        nuo(a,j,nu);
                        j++;
                              }
                else{                            //当这个数为偶数时,记录偶数个数
                        j++;
                        nu+=1;
                    }
           }
        printf("a[%d]=",i);
        j=0;
        while(i!=j){
        printf("   %d",a[j++]);
                   }
        printf("\n");
        return 0;
}
时间: 2024-10-07 05:31:31

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

C#调整数组顺序,让奇数位于偶数前面的算法的代码

写内容之余,把写内容过程中比较重要的内容记录起来,如下的资料是关于C#调整数组顺序,让奇数位于偶数前面的算法的内容,希望对码农们有用. #region 调整数组顺序使奇数位于偶数前面 class Reorder { private List<int> _array; private RecorderOperator _op; public List<int> array { get { return _array; } set { _array = value; } } publi

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格. 样例输入: 5 1 2 3 4 5 样例输

调整数组顺序使奇数位于偶数之前

问题:调整数组顺序是奇数位于偶数之前. 如果不考虑时间复杂度,最简单的思路是从头开始扫描数组,每当遇到一个偶数,就将其取出,然后把该偶数后面的所有数字往前移一位,然后将这个偶数放在数组的最后一个空位上.此时,算法的时间复杂度是 O(N^2).     该题目要求把奇数放在数组的前半部分,偶数放在数组的后半部分,因此,所有的奇数都应该位于偶数之前.也就是说,如果在扫描数组的时候,发现偶数位与奇数的前面,则将奇数与偶数互换位置. [快慢指针]:因此我们可以维护两个指针,第一个指针初始化的时候指向数组

【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面

题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2858解决:924 题目描写叙述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部的奇数位于数组的前半部分,全部的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每一个输入文件包括一组測试案例. 对于每一个測试案例.第一行输入一个n,代表该数组

剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前

题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初始化时候指向数组尾部,第一个指针指向的数字总是偶数,第二个指针指向的数字总是奇数,如果第一个指针在第二个指针之前,则交换两指针指向的元素. 1 package Solution; 2 3 /** 4 * 剑指offer面试题14:调整数组顺序是奇数位于偶数前面 5 * 题目:输入一个整数数组,实现一

【数组】调整数组顺序使奇数位于偶数前面

1. 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分. 1 /** 2 * 调整数组顺序使奇数位于偶数前面 3 * 4 * @author 5 * 6 */ 7 public class Solution { 8 9 public static void order(int[] array) { 10 11 if (null == array || array.length == 0 || array.length ==

《剑指Offer》题目:调整数组顺序使奇数位于偶数前面

题目描述:调整数组顺序使奇数位于偶数前 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析: 题目的关键在于在移位以后,奇数和奇数以及偶数和偶数之间的相对位置保持不变. Java代码: public class ReOrderArray { //这种方法不能保证奇数和奇数,偶数和偶数之间的相对位置不变 public static void reOrderArray(

九度oj 题目1516:调整数组顺序使奇数位于偶数前面

题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3416 解决:1091 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n

调整数组顺序使得奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部的奇数位于数组的前半部分.全部的偶数位于位于数组的后半部分. 代码: /* 调整数组顺序使得奇数位于偶数前面 by Rowandjj 2014/8/1 */ #include<iostream> #include<stdlib.h> using namespace std; //高效解法,但会调整后的数组元素相对顺序会发生改变 void func(int *pArr,int len) { if(pArr == NULL

【面试题014】调整数组顺序使奇数位于偶数前面

[面试题014]调整数组顺序使奇数位于偶数前面    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数     位于    数组的前半部分,所有偶数位于数组的后半部分. 1.第一个指针初始化为指向数组的第一个数字,他向后移动 2.第二个指针初始化为指向数组的最后一个数字,他向前面移动, 3.在两个指针相遇之前,第一个指针总是位于第二个指针的前面, 4.如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数, 我们就交换两个数字,否者如果是一个满足,或者都不满足就按照规