• 快速排序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()里验证一下。

  • 相关阅读:
    oo第四次总结
    oo第三次总结
    补给站总结
    OO第四次单元总结
    OO第三次单元总结
    OO第二次单元总结
    OO第一次单元总结
    提问回顾与个人总结
    软件工程结对作业博客
    OO第一次单元总结
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/7988442.html
Copyright © 2020-2023  润新知