用PHP设计一个函数,要求将数字数组中所有奇数放在左边,0放在中间,偶数放在右边。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用PHP设计一个函数,要求将数字数组中所有奇数放在左边,0放在中间,偶数放在右边。相关的知识,希望对你有一定的参考价值。

如若同时对奇数和偶数进行了大小排序再加20分。
若有正确答案会送上50分,排序后另加20分。

参考技术A <?php
function sort_nums($arr)
$new_array = array(0);

sort($arr);

for($n = 0; $n < count($arr); $n++)
if($arr[$n] != 0)
if($arr[$n] % 2 == 0)
array_push($new_array, $arr[$n]);

else
array_unshift($new_array, $arr[$n]);




return $new_array;


$numbers = array(23, 94, 0, 2, 56, 10, 77, 231, 75, 48);

print_r(sort_nums($numbers));
// 输出 231, 77, 75, 23, 0, 2, 10, 48, 56, 94
?>
参考技术B 不用写函数,你直接在输出的时候进行判断,比如echo“<tr>”或echo“<td>”进行输出,用if进行判断就行! 参考技术C 命题未说明“大小排序”的具体情况:
1、按从小到大、统一升序
<?php
$a = array(23, 94, 0, 2, 56, 10, 77, 231, 75, 48,1,2,3,4,5,67,9,6,33);
function weight($v)
return $v===0? 0: ($v%2===0? 1:-1);

function cmpWeirdo($a,$b)
$wa=weight($a);
$wb=weight($b);
return $wa===$wb? $a-$b : $wa-$wb;

usort($a,'cmpWeirdo');
var_dump($a);
==============
输出
array
0 => int 1
1 => int 3
2 => int 5
3 => int 9
4 => int 23
5 => int 33
6 => int 67
7 => int 75
8 => int 77
9 => int 231
10 => int 0
11 => int 2
12 => int 2
13 => int 4
14 => int 6
15 => int 10
16 => int 48
17 => int 56
18 => int 94

2、按以0为中心,“降-0-升”序排列
<?php
$a = array(23, 94, 0, 2, 56, 10, 77, 231, 75, 48,1,2,3,4,5,67,9,6,33);
function weight($v)
return $v===0? 0: ($v%2===0? 1:-1);

function cmpWeirdo($a,$b)
$wa=weight($a);
$wb=weight($b);
return $wa===$wb? ($wa===-1?$b-$a: $a-$b) : $wa-$wb;

usort($a,'cmpWeirdo');
var_dump($a);
=========
输出
array
0 => int 231
1 => int 77
2 => int 75
3 => int 67
4 => int 33
5 => int 23
6 => int 9
7 => int 5
8 => int 3
9 => int 1
10 => int 0
11 => int 2
12 => int 2
13 => int 4
14 => int 6
15 => int 10
16 => int 48
17 => int 56
18 => int 94本回答被提问者采纳

奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,偶数位于后半部分。

 思路:这个题目要求把奇数放在数组的前半部分,偶数放在数组的后半部分,因此数组中所有奇数位于偶数前面。我们在扫描这个数组时,遇到偶数在奇数前面时可以交换一下它们的顺序。因此我们可以定义两个指针pBengin、pEnd,pBegin指向数组的首地址,pEnd指向数组的最后一位,当pBengin指向的数字为奇数时,pbengin向后移动,当指向的数字为偶数时,先不动。当pEnd指向的数字为偶数时不动,奇数时向前移动。在没有相遇之前奇数总数位于偶数前面,如果第一个指向的位偶数第二个指向的为奇数,可以交换这两个数字。

代码:

#include<iostream>

using namespace std;
void ReorderOddEven(int *arr,int length)
{
	if(arr==NULL|| length==NULL)
		return;
	int *pBegin=arr;
	int *pEnd=arr+length-1;
	while(pBegin<pEnd)
	{
		while(pBegin<pEnd && (*pBegin%2)!=0)//向后移动直到它指向偶数
			pBegin++;
		while(pBegin<pEnd && (*pEnd%2)==0)//向前移动直到它指向奇数
			pEnd--;
		if(pBegin<pEnd)
		{
			int tmp=*pBegin;
			*pBegin=*pEnd;
			*pEnd=tmp;
		}
	}
}

int main()
{
	int arr[]={1,2,3,4,5,6,7};
	int sz=sizeof(arr)/sizeof(arr[0]);
	ReorderOddEven(arr,sz);
	for(int i=0;i<sz;i++)
	{
		cout<<arr[i]<<' ';
	}
	return 0;
}


以上是关于用PHP设计一个函数,要求将数字数组中所有奇数放在左边,0放在中间,偶数放在右边。的主要内容,如果未能解决你的问题,请参考以下文章

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

LintCode之奇偶分割数组

24输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

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

用数组编写:将一整数数列按奇数在前、偶数在后的顺序重新排放,并要求奇偶数两部分分别有序

剑指offer之调整数组顺序使奇数位于偶数前面