用PHP设计一个函数,要求将数字数组中所有奇数放在左边,0放在中间,偶数放在右边。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用PHP设计一个函数,要求将数字数组中所有奇数放在左边,0放在中间,偶数放在右边。相关的知识,希望对你有一定的参考价值。
如若同时对奇数和偶数进行了大小排序再加20分。
若有正确答案会送上50分,排序后另加20分。
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放在中间,偶数放在右边。的主要内容,如果未能解决你的问题,请参考以下文章
24输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。