通过函数使数组中的奇数在偶数的前面

#include<stdio.h>
void change_array(int *p, int len)
{
	if (p == NULL || len == 0)
		return;
	int *begin = p;
	int *end = p + len - 1;
	while (begin < end)
	{
		while ((begin < end) && ((*begin%2)!=0))
			begin++;

		while ((begin < end) && ((*end %2)== 0))
			end--;

		if (begin < end)
		{
			int temp = *begin;
			*begin = *end;
			*end = temp;
		}
	}

}
void main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    int i = 0;
	change_array(a, sizeof(a) / sizeof(a[0]));
	while (i < sizeof(a) / sizeof(a[0]))
	{
		printf("%d ", a[i]);
		i++;
	}
	return;

}
这种做法时间复杂度为O(n),如果从前往后顺序遍历数组每遇到偶数就将其移到数组末尾时间复杂度为O(n2)

时间: 2024-08-27 20:23:53

通过函数使数组中的奇数在偶数的前面的相关文章

调整数组中所有奇数位于偶数之前

题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中 所有奇数全部位于前半数组,所有偶数全部位于后半数组. 题目分析: 一个整型数组中既有奇数又有偶数,欲使所有奇数全部位于前半数组,所有偶数全部位于后半数组, 那么我们不妨从前边查找偶数即arr[left]%2==0,如果不是偶数它将继续向后查找left+1,直到找到偶数,同时从后边 查找奇数即arr[left]%2==1,如果不是奇数它将继续向前查找right-1,将前边找到的奇数和后边找到偶数交换,的当两 个数组相遇时前边

php array_rand()函数从数组中随机选择一个或多个元素

php使用array_rand()函数从数组中随机选择一个或多个元素的方法. 使用array_rand() 函数从数组中随机选出一个或多个元素,并返回. array_rand(array,number) 参数 描述 array 必需.规定输入的数组参数. www.jbxue.com number 可选.默认是 1.规定返回多少个随机的元素. 例子: <?php $a=array("a"=>"Dog","b"=>"Cat

[华为机试]求出数组中所有奇数之和以及所有偶数之和

代码: #include <iostream> #include <sstream> #include <fstream> #include <string> int main() { int num[100]; int odd = 0, even = 0; std::string str; getline(std::cin, str); std::stringstream s(str); int j = 0; while(getline(s, str, '

通过递归使数组中没有重复项

//数组中删除值相同的项,使得数组中没有重复的项//数组自己的方法splice(a,b),在每次使用后会返回一个新的数组,因此必须使用递归得方法来使数组中相同的项删除,如果不这样就达不到这样的效果,有些项会被忽略掉//比如下面这个例子,如果不使用递归,输出的将是1,2,3,4,5,6,7,1很明显第一项和最后一项是相同的,没有达到我们预期的效果//使用递归就不存在这个问题了,输出将是1,2,3,4,5,6,7; 1 var arrzfs = [1,2,2,3,4,4,1,3,5,6,7,7,1,

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

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

剑指offer-高质量的代码(调整数组顺序使得奇数位于偶数的前面)

题目:输入一个整数数组,实现一个函数中调整该数组中数字的顺序,使得所有的奇数位于数组的前半部,所有偶数位于数组的后半部. 思路:用两个指针p1和p2,分别指向数组的头和尾部,p1只向后移,p2只向前移.当满足p1<p2这个条件时,可以将p1向后移并找到第一偶数为止,p2向前移直到找到第一个奇数为止,此时如果还满足p1<p2的条件,则交换p1和p2的值. c++代码:本代码扩展性的体现为:将函数bool (*func) (int)当做参数传人preorder中,而此时要判断数字的奇偶性,可以写一

使数组中奇数位于偶数前面

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分 //第一种方法: #include <stdio.h> void reverse(int *p,int len) {  int *start = p;  int *end = p + len - 1;  int tmp = 0;  while (start < end)  {   if ((*start) % 2 == 1)   {    start++;   }

剑指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;       

数组中,奇数放前偶数放后

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 错误代码: public class Solution { public void reOrderArray(int [] array) { int len=array.length; for(int i=0;i<len;i++){ if((array[i]&1)==0){ int j; for(j=i;j<