Last active
June 27, 2016 13:45
-
-
Save bromne/e73466894c6f470e6b0c90776a486c26 to your computer and use it in GitHub Desktop.
Quicksort: comparison of recursive and loop
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| var swap = function(elements, i, j) { | |
| var temp = elements[i]; | |
| elements[i] = elements[j]; | |
| elements[j] = temp; | |
| }; | |
| var calculate_pivot_index = function(elements, left, right) { | |
| return right; | |
| }; | |
| var partition = function(elements, left, right) { | |
| swap(elements, right, calculate_pivot_index(elements, left, right)); | |
| var pivot = elements[right]; | |
| var leftEnd = left - 1; | |
| for (var i = left; i < right; i++) { | |
| if (elements[i] <= pivot) { | |
| leftEnd++; | |
| swap(elements, leftEnd, i); | |
| } | |
| } | |
| var middle = leftEnd + 1; | |
| swap(elements, middle, right); | |
| return middle; | |
| }; | |
| // 再帰版 | |
| var quick_sort_recursive = function(elements) { | |
| var quick = function(elements, left, right) { | |
| if (right - left > 1) { | |
| var middle = partition(elements, left, right); | |
| quick(elements, left, middle - 1); | |
| quick(elements, middle + 1, right); | |
| } | |
| }; | |
| quick(elements, 0, elements.length - 1); | |
| }; | |
| // ループ版 | |
| var quick_sort_loop = function(elements) { | |
| var stack = []; | |
| stack.push({left: 0, right: elements.length - 1}); | |
| while (true) { | |
| if (stack.length > 0) { | |
| var context = stack.pop(); | |
| if (context.right - context.left > 1) { | |
| var middle = partition(elements, context.left, context.right); | |
| stack.push({left: context.left, right: middle - 1}); | |
| stack.push({left: middle + 1, right: context.right}); | |
| } | |
| } else | |
| break; | |
| } | |
| }; | |
| (function() { | |
| var e = [2, 1, 0, 7, 6, 5, 9]; | |
| quick_sort_recursive(e); | |
| console.log(e); | |
| var f = [2, 1, 0, 7, 6, 5, 9]; | |
| quick_sort_loop(f); | |
| console.log(f); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment