快速排序 javascript实现
2015-04-23 17:08
375 查看
Quicksort(快速排序)
是由 东尼·霍尔 所发展的一种排序。它比其他的Ο(n log n)算法更快,
因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。当然,本文是JavaScript实现。
算法
排序算法使用分治法 (Divide and conquer) 把一个序列(list)分为两个子序列(sub-lists)。步骤
从数列中挑出一个元素,称为“基准” (pivot)。重新排序数列,所有元素都比基准值晓得摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次迭代(iteration)中,它至少会把一个元素摆放到它最后的位置去。
代码
配合实现交换的swap的代码function swap(items,firstIndex,secondIndex){ var temp = items[firstIndex]; items[firstIndex] = items[secondIndex]; items[secondIndex] = temp; }
分区(partition)操作
function partition(items,left,right){ var pivot = items[Math.floor((right+left) / 2)], i = left, j = right; while (i < j) { while(items[i] < pivot) { i++; } while (items[j] > pivot) { j--; } if (i <= j) { swap(items,i,j); i++; j--; } } return i; }
快排(使用递归)
function quickSort(items,left,right) { var index; if (items.length > 1) { index = partition(items, left, right); if (left <index - 1) { quickSort(items, left, index - 1); } if (index < right) { quickSort(items, index, right); } } return items; }
小结一下
使用了快排,改变了原数组。如果你使用了上方的代码,要记得这点啊。。解决的办法?
复制原数组?
是是是是(
相关文章推荐
- 学习笔记:快速排序的C++、JavaScript(2种方法)、Java实现
- Java&&JavaScript:实现快速排序
- 快速排序,选择排序,直接插入,冒泡排序的javascript实现
- javascript实现快速排序
- 快速排序(Quicksort)的Javascript实现
- 快速排序javascript实现
- javaScript实现快速排序
- javascript实现快速排序
- JavaScript实现冒泡(选择、快速)排序可视化
- javascript实现快速排序
- 快速排序之JavaScript实现
- JavaScript实现冒泡排序、快速排序、插入排序
- 算法的JavaScript实现之快速排序
- 快速排序Java实现和Javascript实现
- linux c 实现 快速排序
- 快速排序的递归和非递归实现
- JavaScript实现表格排序方法
- C++ 快速排序 递归实现