Here’s some Friday fun. Let me show you one sorting algorithm, perhaps the most known of all them – the quick sort, implemented both on PHP and JavaScript. Although the code look similar between both languages, there are few differences, that show the importance of the syntax knowledge!

### 1. PHP

<?php $unsorted = array(2,4,5,63,4,5,63,2,4,43); function quicksort($array) { if (count($array) == 0) return array(); $pivot = $array[0]; $left = $right = array(); for ($i = 1; $i < count($array); $i++) { if ($array[$i] < $pivot) $left[] = $array[$i]; else $right[] = $array[$i]; } return array_merge(quicksort($left), array($pivot), quicksort($right)); } $sorted = quicksort($unsorted); print_r($sorted); |

### 2. JavaScript

var a = [2,4,5,63,4,5,63,2,4,43]; function quicksort(arr) { if (arr.length == 0) return []; var left = new Array(); var right = new Array(); var pivot = arr[0]; for (var i = 1; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quicksort(left).concat(pivot, quicksort(right)); } console.log(quicksort(a)); |

Note that the first conditional statement is quite important! While in PHP the count function will return 0 either on a NULL value or an empty array and you can substitute it with something like count($array) < 2

if (count($array) < 2) return $array; |

in JavaScript you cannot use that because of the presence of the ‘undefined’ value when an “empty” array is passed as an argument. Thus you’ve the conditional above:

// this will result with an error if (arr.length < 2) return arr; |

## Coming Up Next …

An iterative version of the algorithm next Friday!

Hi, I have to make javascript quick sort animation but I have some troubles. Please… don’t you know, how to make it possible? Because of undefined statement I’m quite disoriented.

@Filip – please provide some code as an example!

http://pastebin.com/UFaT4r4C (val[] is array)

I need quick sort that doesn’t work with buffers, like you did. Just let it work on one array, because I want to animate it and each swap save in another array to use it on animating etc… This algorithm works with PHP, C++, but with this implementation, it doesn’t work. In while loops I get into undefined statement and whole algorithm loops forever.

I did mistake. =) I meant, that this implementation works with PHP, C++, Pascal but with javascript it doesn’t work, because of undefined statement. There are lots of implementation, but no one is suited for animation that I need to school project.

Thank you very much! =)

I started to study algorithm (and started with sorting algorithms of course!) and found some interesting thing. I looked on the web for examples and all use at iteration something like that (and you too):

for ($i = 1; $i < count($array); $i++)…

I found that is not efficient as time consuption because array elements must be counted at every iteration. I think is optim to memorize counted value first. I run some test and found that.

What is your opinion?

Hi tzulac,

Indeed that is a bad practice. However I made it because it’s more important to show the frame of the algorithm. As you know different environemnts have different approaches when trying to optimize a chunk of code and mine is PHP. Thus you can go for a different solution in other languages. That is why I just didn’t focus on this part of the code.

However, thanks for the remark!