From 040cfe510b5b07bc16e5762b5e4ce5959c942d1d Mon Sep 17 00:00:00 2001 From: Kevin Nguyen Date: Thu, 16 Jun 2016 23:00:05 -0700 Subject: [PATCH] code from chapter 4 in javascript --- 04_quicksort/01_loop_sum.js | 11 +++++++++++ 04_quicksort/02_recursive_sum.js | 10 ++++++++++ 04_quicksort/03_recursive_count.js | 10 ++++++++++ 04_quicksort/04_recursive_max.js | 11 +++++++++++ 04_quicksort/05_quicksort.js | 18 ++++++++++++++++++ 5 files changed, 60 insertions(+) create mode 100644 04_quicksort/01_loop_sum.js create mode 100644 04_quicksort/02_recursive_sum.js create mode 100644 04_quicksort/03_recursive_count.js create mode 100644 04_quicksort/04_recursive_max.js create mode 100644 04_quicksort/05_quicksort.js diff --git a/04_quicksort/01_loop_sum.js b/04_quicksort/01_loop_sum.js new file mode 100644 index 0000000..d2f70fd --- /dev/null +++ b/04_quicksort/01_loop_sum.js @@ -0,0 +1,11 @@ +'use strict'; + +function sum(arr) { + let total = 0; + for (let x = 0; x < arr.length; x++) { + total += arr[x]; + } + return total; +} + +console.log(sum([1, 2, 3, 4])) // 10 diff --git a/04_quicksort/02_recursive_sum.js b/04_quicksort/02_recursive_sum.js new file mode 100644 index 0000000..b0712f2 --- /dev/null +++ b/04_quicksort/02_recursive_sum.js @@ -0,0 +1,10 @@ +'use strict'; + +function sum(list) { + if (list.length === 0) { + return 0; + } + return list[0] + sum(list.slice(1)); +} + +console.log(sum([1, 2, 3, 4])) // 10 diff --git a/04_quicksort/03_recursive_count.js b/04_quicksort/03_recursive_count.js new file mode 100644 index 0000000..139acfc --- /dev/null +++ b/04_quicksort/03_recursive_count.js @@ -0,0 +1,10 @@ +'use strict'; + +function count(list) { + if (list.length === 0) { + return 0; + } + return 1 + count(list.slice(1)); +} + +console.log(count([0, 1, 2, 3, 4, 5])); // 6 diff --git a/04_quicksort/04_recursive_max.js b/04_quicksort/04_recursive_max.js new file mode 100644 index 0000000..fe457e9 --- /dev/null +++ b/04_quicksort/04_recursive_max.js @@ -0,0 +1,11 @@ +'use strict'; + +function max(list) { + if (list.length === 2) { + return list[0] > list[1] ? list[0] : list[1]; + } + let sub_max = max(list.slice(1)); + return list[0] > sub_max ? list[0] : sub_max; +} + +console.log(max([1, 5, 10, 25, 16, 1])); // 25 diff --git a/04_quicksort/05_quicksort.js b/04_quicksort/05_quicksort.js new file mode 100644 index 0000000..c3c61ae --- /dev/null +++ b/04_quicksort/05_quicksort.js @@ -0,0 +1,18 @@ +'use strict'; + +function quicksort(array) { + if (array.length < 2) { + // base case, arrays with 0 or 1 element are already "sorted" + return array; + } else { + // recursive case + let pivot = array[0]; + // sub-array of all the elements less than the pivot + let less = array.slice(1).filter(function(el) { return el <= pivot; }); + // sub-array of all the elements greater than the pivot + let greater = array.slice(1).filter(function(el) { return el > pivot; }); + return quicksort(less).concat([pivot], quicksort(greater)); + } +} + +console.log(quicksort([10, 5, 2, 3])); // [2, 3, 5, 10]