快速排序javascript实现

快速排序基本思想:

以升序为例

数组arr,数组个数n;

1、选取一个待排序的元素。一般选第一个位置作为基准值temp=arr[0]。

2、选取带排序数组的两端元素的位置作为哨兵的位置,左端为哨兵i,右端为哨兵j,

3、先用哨兵j所在位置的值与基准值比较,如比基准值大则左移,再用哨兵i所在位置的值与基准值比较,比基准值小则右移。

4、哨兵i,j位置已确定但是i还是在j的左边,则交换值arr[i]和arr[j]。

5、否则,i,j相遇,则基准值位置确定。交换arr[i]和基准值temp。这时基准值temp左边的值都比temp小,右边的值都比temp大。

6、分别递归快拍temp的左边和右边的数组。

 

js实现:

 1 var arr = [5,8,7,3,2,4,9,1,10,6];
 2   var n = 9;
 3 
 4   function quicksort(left, right) {
 5       var i,j,t,temp;
 6       if(left > right)
 7         return;
 8       i = left;
 9       j = right;
10       temp = arr[left];
11       //两个哨兵不相遇
12       while (i != j){
13         //对于右哨兵找到一个比标准值temp小的停下
14         while(arr[j] >= temp && i<j){
15           j--;
16         }
17         //对于左哨兵找到一个比标准值temp大的停下
18         while(arr[i] <= temp && i<j){
19           i++;
20         }
21         //如果左右哨兵没有相遇,则交换第i和第j个元素的位置
22         if(i < j){
23           t = arr[i];
24           arr[i] = arr[j];
25           arr[j] = t;
26         }
27       }
28       //左右哨兵相遇,将最终基数归位
29       arr[left] = arr[i];
30       arr[i] = temp;
31       //继续递归左边的处理
32       quicksort(left, i-1);
33       //继续递归处理右边的数组
34       quicksort(i+1, right);
35   }
36 
37   quicksort(0,n);

可以将代码复制到浏览器的console.log()里验证一下。

转载于:https://www.cnblogs.com/wjw-blog/p/7988442.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值