zoukankan      html  css  js  c++  java
  • js快速排序

    快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

    快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:

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

    动态展示

    代码实现

     1 let array = randomArray(1,100);
     2 console.log(array);
     3 quickSort(0, array.length);
     4 console.log(array);
     5 function quickSort(begin,end) {
     6   if(end - begin < 2) {
     7      return;
     8   }
     9   let mid = pivotIndex(begin, end);
    10   quickSort(begin,mid);
    11   quickSort(mid + 1,end);
    12 }
    13 function pivotIndex(begin,end){
    14   let pivot = array[begin];
    15   end--;
    16   while(begin < end) {
    17     while(begin < end) {
    18        if(pivot - array[end] < 0) {
    19           end--;
    20        }else{
    21           array[begin++] = array[end];
    22           break;
    23         }
    24     }
    25     while(begin < end) {
    26        if(pivot - array[begin] > 0) {
    27          begin++;
    28        }else{
    29           array[end--] = array[begin];
    30           break;
    31        }
    32      }
    33   }
    34   array[begin] = pivot;
    35   return begin;
    36 }
     1 function randomArray(start,end){
     2     var a=[],o={},random,step=end-start;
     3     while(a.length<step){
     4        random=start+parseInt(Math.random()*step);
     5        if(!o["x"+random]){
     6           a.push(random);
     7           o["x"+random]=1;
     8        };
     9     };
    10     return a;
    11 }
  • 相关阅读:
    10. 王道考研-树与二叉树
    Shell基础论证实例
    关系型数据库与非关系型数据库区别
    中高级测试工程师面试题
    idea中cucumber环境搭建
    Java开发中对Redis的基本操作总结
    TestNG 单元测试框架(针对于testNG.xml配置)
    jmeter(四十五)常用Beanshell脚本
    Jmeter(二十一)_脚本两种参数化
    Jmeter(十五)_上传与下载
  • 原文地址:https://www.cnblogs.com/ming1025/p/13876777.html
Copyright © 2011-2022 走看看