JavaScript快速排序算法QuickSort实现
来源:互联网 发布:彩票数据api 编辑:程序博客网 时间:2024/04/30 18:04
来自:http://blog.csdn.net/henren555/article/details/39611401
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 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.
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]}
0 0
- JavaScript快速排序算法QuickSort实现
- JavaScript快速排序算法QuickSort实现
- 快速排序(quicksort)算法实现
- 快速排序(quicksort)算法实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- 快速排序(Quicksort)的Javascript实现
- Javascript实现快速排序(Quicksort)
- 快速排序(Quicksort)的Javascript实现
- QUicKSort 快速排序算法 c实现
- C++实现快速排序算法QuickSort()
- 算法导论 - QuickSort 快速排序 C++实现
- 堆排序
- 创建 Image - 每天5分钟玩转 OpenStack(21)
- 使用C++ 标准库 stringstream实现各种数据类型之间的转换
- Ajax解决浏览器的缓存问题
- 关于序列化
- JavaScript快速排序算法QuickSort实现
- html标签属性大全
- 判断单链表里面有没有环
- Hadoop、Spark、HBase与Redis的适用性见解
- HDU 2544最短路 dijikstra算法
- 手势事件与TableViewCell点击事件冲突
- in与exist,not in与not exsit的区别
- showModelDialog的使用(一)
- 技术学习_经验分享