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 ...
随机推荐
- BZOJ题目(持续更新)
bzoj1009:kmp想法+递推+矩阵快速幂.很好的想法,考虑用长串去kmp匹配短串,dp[i][j]表示匹配指针分别指在i.j位置时候,前i位母字符串一共有多少种可能性,那么dp[i][j]=Σd ...
- DNS入门(转)
转自:阮一峰的网络日志 作者: 阮一峰 DNS 是互联网核心协议之一.不管是上网浏览,还是编程开发,都需要了解一点它的知识. 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作.我的目标是,读 ...
- SpringMVC中 Controller的 @ResponseBody注解分析
需求分析:需要 利用 out 对象返回给财付通是否接收成功 .那么将需要如下代码: /** * 返回处理结果给财付通服务器. * @param msg: Success or fail. * @ ...
- 正确使用Block避免Cycle Retain和Crash
Block简介 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持GC机制,使用Block必须自己管理内存 ...
- excel怎么把文本格式的数字转换为数字,且把前面的撇号去掉
excel把文本格式的数字转换为数字,且把前面的撇号去掉方法:1.选中要处理的列,在“数据”菜单下,选择“分列”.2.在“分列”向导对话框里,选择“分隔符号”,并点击下一步.3.在“分列”向导对话框第 ...
- Ubuntu+Apache+PHP+Mysql环境搭建(完整版)
Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统Ubuntu 14.04 64位,阿里云服务器 二.Apache 1.安装Apache,安装命令:sudo apt-get ...
- 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 ...
- 求助大神!怎样除去XML节点反复的值的数据
<?xml version="1.0" encoding="utf-8"? > <UpdCfg> <Upgrade> < ...
- Phpstorm 放大字体的快捷键是什么?
这个功能需要设置才能使用: 步骤:control+shift+A功能可以搜索对应功能 输入mouse 设置Change font size(Zoom) ...的按钮打开,然后就可以通过 ctrl+ ...
- swich-----case语句的用法
转: http://xinzhi.wenda.so.com/a/1517927252619839