[ create a new paste ] login | about

Link: http://codepad.org/mxCgM8Gc    [ raw code | output | fork ]

PHP, pasted on Mar 4:
<?php

	function waveSort(array $array) {

		$elem = sqrt(count($array));

		for($i = 0; $i < $elem; $i++) {
			$multi[] = array_slice($array, $i*$elem , $elem);
		}

		$new = array();
		$rotation = false;
		for($i = 0; $i <= $elem-1; $i++) {
			$k = $i;
			for($j = 0; $j <= $i; $j++) {
				if($rotation)
					$new[] = $multi[$k][$j];
				else
					$new[] = $multi[$j][$k];
				$k--;
			}	
			$rotation = !$rotation;
		}

		for($i = $elem-1; $i > 0; $i--) {
			$k = $elem - $i;

			for($j = $elem-1; $j >= $elem - $i; $j--) {

				if(!$rotation)
					$new[] = $multi[$k][$j];
				else
					$new[] = $multi[$j][$k];
				$k++;
			}	
			$rotation = !$rotation;
		}
		
		return $new;
	}
	
	$array = range(1, 25);
	$result = waveSort($array);
	print_r($result);
	
	$array = range(1, 36);
	$result = waveSort($array);
	print_r($result);


Output:
Array
(
    [0] => 1
    [1] => 6
    [2] => 2
    [3] => 3
    [4] => 7
    [5] => 11
    [6] => 16
    [7] => 12
    [8] => 8
    [9] => 4
    [10] => 5
    [11] => 9
    [12] => 13
    [13] => 17
    [14] => 21
    [15] => 22
    [16] => 18
    [17] => 14
    [18] => 10
    [19] => 15
    [20] => 19
    [21] => 23
    [22] => 24
    [23] => 20
    [24] => 25
)
Array
(
    [0] => 1
    [1] => 7
    [2] => 2
    [3] => 3
    [4] => 8
    [5] => 13
    [6] => 19
    [7] => 14
    [8] => 9
    [9] => 4
    [10] => 5
    [11] => 10
    [12] => 15
    [13] => 20
    [14] => 25
    [15] => 31
    [16] => 26
    [17] => 21
    [18] => 16
    [19] => 11
    [20] => 6
    [21] => 12
    [22] => 17
    [23] => 22
    [24] => 27
    [25] => 32
    [26] => 33
    [27] => 28
    [28] => 23
    [29] => 18
    [30] => 24
    [31] => 29
    [32] => 34
    [33] => 35
    [34] => 30
    [35] => 36
)


Create a new paste based on this one


Comments: