JavaScript简单方便,所以用JavaScript实现,可以在Chrome控制台下观察运行结果。主要实现Partition算法,比如输入为 
  var array = [4, 2, 1, 3, 6, 8, 9, 7, 5]; 
  partition(array, 0, 8); 
那么按照array[0]即4进行划分,结果为 [3, 2, 1, 4, 6, 8, 9, 7, 5] .
​1. [代码][JavaScript]代码

// 先来看Partition算法,Partition算法是快速排序的基础
<script type="text/javascript">
    // 划分算法
   function partition(array, p, r) {
      if(p < 0 || r < 0 || p >= r || r > array.length-1)
        return;
       
      var i = p;
      var pivot = array[i];
      for(var j = p+1; j <= r; j++) {
         if(array[j] < pivot) {
            i++;
            var temp = array[j];
            array[j] = array[i];
            array[i] = temp;
         }
      }
       
      // 交换array[i]和array[p]
      var temp = array[p];
      array[p] = array[i];
      array[i] = temp;
       
      return i;
  }
   
  var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
  partition(array, 0, 8);
  console.log(array);
</script>
2. [代码][JavaScript]代码    
// 基于上面的Partition算法,获得下面的快速排序算法
<script type="text/javascript">
    // 划分算法
   function partition(array, p, r) {
      if(p < 0 || r < 0 ||  p >= r || r > array.length-1)
        return;http://www.huiyi8.com/clxgt/​
       
      var i = p;窗帘效果图
      var pivot = array[i];
      for(var j = p+1; j <= r; j++) {
         if(array[j] < pivot) {
            i++;
            var temp = array[j];
            array[j] = array[i];
            array[i] = temp;
         }
      }
       
      // 交换array[i]和array[p]
      var temp = array[p];
      array[p] = array[i];
      array[i] = temp;
       
      return i;
  }
   
  function quickSort(array, p, q) {
     if(p > q || p < 0 || q < 0 || q > array.length-1)
        return;
      
     if(p==q)   // 递归终止条件
        return;
      
     var mid = partition(array, p, q);
     quickSort(array, p, mid-1);
     quickSort(array, mid+1, q); 
  }
   
  var array = [4, 2, 1, 3, 6, 8, 9, 7, 5];
  quickSort(array, 0, 8);
   
  console.dir(array);
</script>

Partition算法及Partition算法用于快速排序的更多相关文章

  1. JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

    1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...

  2. java排序算法(五):快速排序

    java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...

  3. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

  4. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  5. neat算法——本质就是遗传算法用于神经网络的自动构建

    基于NEAT算法的马里奥AI实现 所谓NEAT算法即通过增强拓扑的进化神经网络(Evolving Neural Networks through Augmenting Topologies),算法不同 ...

  6. 在Object-C中学习数据结构与算法之排序算法

    笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...

  7. Peterson算法与Dekker算法解析

    进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations  lik ...

  8. 面试常用算法总结——排序算法(java版)

    排序算法 重要性不言而喻,很多算法问题往往选择一个好的排序算法往往问题可以迎刃而解 1.冒泡算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个 ...

  9. Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦

    Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...

随机推荐

  1. BZOJ题目(持续更新)

    bzoj1009:kmp想法+递推+矩阵快速幂.很好的想法,考虑用长串去kmp匹配短串,dp[i][j]表示匹配指针分别指在i.j位置时候,前i位母字符串一共有多少种可能性,那么dp[i][j]=Σd ...

  2. DNS入门(转)

    转自:阮一峰的网络日志 作者: 阮一峰 DNS 是互联网核心协议之一.不管是上网浏览,还是编程开发,都需要了解一点它的知识. 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作.我的目标是,读 ...

  3. SpringMVC中 Controller的 @ResponseBody注解分析

    需求分析:需要 利用    out 对象返回给财付通是否接收成功 .那么将需要如下代码: /** * 返回处理结果给财付通服务器. * @param msg: Success or fail. * @ ...

  4. 正确使用Block避免Cycle Retain和Crash

    Block简介 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存 ...

  5. excel怎么把文本格式的数字转换为数字,且把前面的撇号去掉

    excel把文本格式的数字转换为数字,且把前面的撇号去掉方法:1.选中要处理的列,在“数据”菜单下,选择“分列”.2.在“分列”向导对话框里,选择“分隔符号”,并点击下一步.3.在“分列”向导对话框第 ...

  6. Ubuntu+Apache+PHP+Mysql环境搭建(完整版)

    Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统Ubuntu 14.04 64位,阿里云服务器 二.Apache 1.安装Apache,安装命令:sudo apt-get ...

  7. Resolving 'Root Partition Is Filling Up' Issue on Sophos UTM Firewall

    from: https://wandersick.blogspot.com/2016/06/resolving-root-partition-is-filling-up.html This is a ...

  8. 求助大神!怎样除去XML节点反复的值的数据

    <?xml version="1.0" encoding="utf-8"? > <UpdCfg> <Upgrade> < ...

  9. Phpstorm 放大字体的快捷键是什么?

      这个功能需要设置才能使用: 步骤:control+shift+A功能可以搜索对应功能 输入mouse 设置Change font size(Zoom) ...的按钮打开,然后就可以通过 ctrl+ ...

  10. swich-----case语句的用法

    转:  http://xinzhi.wenda.so.com/a/1517927252619839