Partition算法及Partition算法用于快速排序
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算法用于快速排序的更多相关文章
- JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
- java排序算法(五):快速排序
java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...
- javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)
javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- neat算法——本质就是遗传算法用于神经网络的自动构建
基于NEAT算法的马里奥AI实现 所谓NEAT算法即通过增强拓扑的进化神经网络(Evolving Neural Networks through Augmenting Topologies),算法不同 ...
- 在Object-C中学习数据结构与算法之排序算法
笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
- Peterson算法与Dekker算法解析
进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations lik ...
- 面试常用算法总结——排序算法(java版)
排序算法 重要性不言而喻,很多算法问题往往选择一个好的排序算法往往问题可以迎刃而解 1.冒泡算法 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个 ...
- Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦
Machine Learning读书会,面试&算法讲座,算法公开课,创业活动,算法班集锦 近期活动: 2014年9月3日,第8次西安面试&算法讲座视频 + PPT 的下载地址:http ...
随机推荐
- CodeForces - 393E Yet Another Number Sequence
Discription Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recur ...
- [转] 32位 PL/SQL Develope r如何连接64位的Oracle 图解
原文地址:LINK 由于硬件技术的不断更新,Win7系统逐渐成为主流,而且计算机内存逐渐增大,为了充 分的利用内存资源(因为32为系统最多只能用到3G左右的内存),提高系统性能,很多人开始使用Win7 ...
- SQL-基础学习3--通配符:LIKE,%,(_); 拼接:+,||,concat;
第六课 用通配符进行过滤 6.1 LIKE操作符 通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符.为在搜索子句中使用通配符,必须使用LIKE操作符.LIKE指示DB ...
- 在Android Studio下使用Hierarchy Viewer
前言 最近看到这篇文章<Android UI性能优化详解>,里面使用了Hierarchy Viewer来对布局进行优化.开发android这么久了,一直都有听过这个工具,但是重来都没真正去 ...
- stateMachine 相关知识
一个state的基本构造,processMessage 以及可选的enter exit 和getName. processMessager是用于处理数据. enter 和exit 则是类似于 面向编程 ...
- 转:国内外著名开源b2c电子商务系统比较包括asp.net和php
from: http://longdick.iteye.com/blog/1122879 国内外著名开源b2c电子商务系统比较包括asp.net和php 博客分类: 电子商务 国内外著名开源b2c ...
- require.js使用
无可奈何,二开项目用了require.js! 一道槛是挨不过去了 require官网: http://requirejs.org/ require.js cdn: <script src=&qu ...
- 小谈Vim打开文件开头的<feff>
在本地Windows机上开发的PHP程序上传到linuxserver上后,通过浏览器訪问对应接口.发现返回的数据前多了一个莫名的字符'-',甚为不解.之后通过网络抓包的方式,查看到接口返回数据前多了 ...
- mysql 查询表索引的命令详解
http://hi.baidu.com/wylinux/item/cbc458c2984381300831c651查看索引命令mysql> show index from tblname;mys ...
- find and xargs
调整搜索深度 -mandepth 搜索当前目录,而不进入子目录: find . -maxdepth 0 -name "debug*" Linux中find常见用法示例 ·find ...