码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序 javascript实现

时间:2015-04-23 19:25:15      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

Quicksort(快速排序)

是由 东尼·霍尔 所发展的一种排序。

它比其他的Ο(n log n)算法更快,

因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。当然,本文是JavaScript实现。

算法

排序算法使用分治法 (Divide and conquer) 把一个序列(list)分为两个子序列(sub-lists)。

技术分享

步骤

  1. 从数列中挑出一个元素,称为“基准” (pivot)。
  2. 重新排序数列,所有元素都比基准值晓得摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次迭代(iteration)中,它至少会把一个元素摆放到它最后的位置去。

代码

配合实现交换的swap的代码

1 function swap(items,firstIndex,secondIndex){
2     var temp = items[firstIndex];
3     items[firstIndex] = items[secondIndex];
4     items[secondIndex] = temp;
5 }

分区(partition)操作

 1 function partition(items,left,right){
 2     var pivot = items[Math.floor((right+left) / 2)],
 3         i     = left,
 4         j     = right;
 5     while (i < j) {
 6         while(items[i] < pivot) {
 7             i++;
 8         }
 9         while (items[j] > pivot) {
10             j--;
11         }
12         if (i <= j) {
13             swap(items,i,j);
14             i++;
15             j--;
16         }
17     }
18     return i;
19 }

快排(使用递归)

 1 function quickSort(items,left,right) {
 2     var index;
 3     if (items.length > 1) {
 4         index = partition(items, left, right);
 5         if (left <index - 1) {
 6             quickSort(items, left, index - 1);
 7         }
 8         if (index < right) {
 9             quickSort(items, index, right);
10         }
11     }
12     return items;
13 }

小结一下

使用了快排,改变了原数组。如果你使用了上方的代码,要记得这点啊。。

解决的办法?

复制原数组?

 

 

 

 

是是是是( 

快速排序 javascript实现

标签:

原文地址:http://www.cnblogs.com/fenggu/p/4451120.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!