JavaScript快速排序算法QuickSort实现
2014-09-27 14:09
513 查看
http://www.codeproject.com/Tips/798092/JavaScript-Quick-Sort-Array-Proto-Type-Method
This is a proto type method for arrays in JavaScript. It utilizes an iterative version of the Quick Sort algorithm. More information about the quick sort algorithm can be found here.
I adapted an iterative version of Quick Sort made in C located here. I tested this iterative
version and a recursive version and found that the iterative version usually preforms about twice as fast. I also included some additional features that are not included in the vanilla version of JavaScript sort.
Collapse | Copy
Code
These examples explain how to use this code.
Collapse | Copy
Code
This article, along with any associated source code and files, is licensed under The
Code Project Open License (CPOL)
Introduction
This is a proto type method for arrays in JavaScript. It utilizes an iterative version of the Quick Sort algorithm. More information about the quick sort algorithm can be found here.
Background
I adapted an iterative version of Quick Sort made in C located here. I tested this iterativeversion and a recursive version and found that the iterative version usually preforms about twice as fast. I also included some additional features that are not included in the vanilla version of JavaScript sort.
JavaScript Quick Sort Library
Collapse | Copy
Code
(function() { var defaultCompare, defaultSwap, partition, quickSort; Array.prototype.quickSort = function(compare, swap) { if (typeof compare !== "function") { compare = defaultCompare; } if (typeof swap !== "function") { swap = defaultSwap; } quickSort(this, 0, this.length - 1, compare, swap); }; defaultCompare = function(value1, value2) { return value1 < value2; }; defaultSwap = function(array, index1, index2) { var temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; }; partition = function(array, start, stop, compare, swap) { var pivot = array[stop], storeIndex = start - 1; while (start < stop) { if (compare(array[start], pivot)) { storeIndex++; swap(array, storeIndex, start); } start++; } swap(array, storeIndex + 1, stop); return storeIndex + 1; }; quickSort = function(array, startIndex, stopIndex, compare, swap) { var pivot, stack, start, top; stack = new Array(stopIndex - startIndex + 1); top = -1; stack[++top] = startIndex; stack[++top] = stopIndex; while (top > -1) { stopIndex = stack[top--]; startIndex = stack[top--]; pivot = partition(array, startIndex, stopIndex, compare, swap); if (pivot - 1 > startIndex) { stack[++top] = startIndex; stack[++top] = pivot - 1; } if (pivot + 1 < stopIndex) { stack[++top] = pivot + 1; stack[++top] = stopIndex; } } }; }());
Using the libary
These examples explain how to use this code.Collapse | Copy
Code
// //Plain Sort // var plainSort = [4, 7, 6, 5, 7, 0, 1, 5, 10, 10, 8]; plainSort.quickSort(); console.log(JSON.stringify(plainSort)); //Prints: [0,1,4,5,5,6,7,7,8,10,10] // //Sort With Custom Compare Function // var descendingOrder = [4, 7, 6, 5, 7, 0, 1, 5, 10, 10, 8]; descendingOrder.quickSort(function(a, b) { //Descending order compare return a > b; }); console.log(JSON.stringify(descendingOrder)); //Prints: [10,10,8,7,7,6,5,5,4,1,0] // //Sort multiple arrays with a custom compare // var table = { "employeeName": ["Jane", "John", "Tom", "Alex", "Mary"], "id": [10, 5, 7, 3, 0] }; table.employeeName.quickSort(function(a, b) { //Strings have to be compared using the localeCompare function return (a || "").localeCompare(b) < 0; }, function(array, index1, index2) { //Sorts both arrays in the 'table' object var temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; temp = table.id[index1]; table.id[index1] = table.id[index2]; table.id[index2] = temp; }); console.log(JSON.stringify(table)); //Prints:{"employeeName":["Alex","Jane","John","Mary","Tom"],"id":[3,10,5,0,7]}
License
This article, along with any associated source code and files, is licensed under TheCode Project Open License (CPOL)
相关文章推荐
- C++实现快速排序算法QuickSort()
- 快速排序(Quicksort)的Javascript实现
- 基于JavaScript实现的快速排序算法分析
- 快速排序算法的实现(QuickSort)
- 快速排序(Quicksort)的Javascript实现
- QUicKSort 快速排序算法 c实现
- 快速排序(Quicksort)的Javascript实现
- 图文讲解Java中实现quickSort快速排序算法的方法
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序算法Quicksort(C++实现)
- 快速排序(Quicksort)的Javascript实现
- JavaScript对快速排序算法的初步实现
- JDK的快速排序算法实现DualPivotQuicksort
- 真正的快速排序算法javascript实现
- Javascript实现快速排序(Quicksort)的算法详解
- Javascript实现快速排序(Quicksort)的算法详解
- 快速排序(QuickSort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现