var qurckSort = function(array){
function qsort(array, begin, end){
if(end>begin){
//找到枢纽
var index = partition(array, begin, end);
qsort(array, begin, index-1);
qsort(array, index+1, end);
}
}
//定义三个内部函数
function partition(array, begin, end){
//随意定位枢纽的位置
var index=begin+Math.floor(Math.random()*(end-begin));
//获取枢纽的值
var pivot=array[index];
//获取枢纽后, 将其置放到数组的最后一个位置
swap(array,index,end);
//之后循环数组, 与枢纽进行比较, 相当于重新排数组
for(var i=index=begin;i<end;i++){
//如果当前元素小于枢纽,则交换位置
if(array[i]<pivot){
swap(array, index++, i);
}
}
swap(array, index, end);
return index;
}
function swap(array,a,b){
var tmp = array[a]
array[a] = array[b]
array[b] = tmp ;
}
qsort(array, 0, array.length-1);
}
<!doctype html>
<html dir="ltr" lang="zh-CN">
<head>
<meta charset="utf-8"/>
<title>快速排序 by 司徒正美</title>
<script type="text/javascript" charset="utf-8">
window.onload = function(){
var assert ,item,test = function(str){
if(!assert){
assert = document.createElement("ol");
assert.i = 0;
item = document.createElement("li");
document.body.insertBefore(assert,null);
}
var li = item.cloneNode(false);
assert.appendChild(li);
li.innerHTML = str;
assert.i++;
li.style.backgroundColor = assert.i%2 === 1? "#e6e6e6" : "#D0E4FC";
};
var qurckSort = function(array){
function qsort(array, begin, end){
if(end>begin){
//找到枢纽
var index = partition(array, begin, end);
qsort(array, begin, index-1);
qsort(array, index+1, end);
}
}
//定义三个内部函数
function partition(array, begin, end){
//随意定位枢纽的位置
var index=begin+Math.floor(Math.random()*(end-begin));
//获取枢纽的值
var pivot=array[index];
//获取枢纽后, 将其置放到数组的最后一个位置
swap(array,index,end);
//之后循环数组, 与曲扭进行比较, 相当于重新排数组
for(var i=index=begin;i<end;i++){
//如果当前元素小于枢纽,则交换位置
if(array[i]<pivot){
swap(array, index++, i);
}
}
swap(array, index, end);
return index;
}
function swap(array,a,b){
var tmp = array[a]
array[a] = array[b]
array[b] = tmp ;
}
qsort(array, 0, array.length-1);
}
var randArray = [];
for(var i=0; i<30; i++)
randArray[i]=Math.floor((Math.random())*100);
document.write('快速排序:
'); test('
未排序之前 '+randArray.join(" ")); qurckSort(randArray); test('
排序之后 '+randArray.join(" ")); } </script> </head> <body> http://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F </body> </html>
运行代码
24,8,1,44,13,34,11,64,23,98,43,25
25,8,1,44,13,34,11,64,23,98,43,24 v = 24,
8,25,1,44,13,34,11,64,23,98,43,24 0
8,1,25,44,13,34,11,64,23,98,43,24 1
8,1,13,44,25,34,11,64,23,98,43,24 2
8,1,13,11,25,34,44,64,23,98,43,24 3
8,1,13,11,23,34,44,64,25,98,43,24 4
8,1,13,11,23,24,44,64,25,98,42,34 5
[8,1,13,11,23],24,[64,25,98,42,34]//枢纽分别为8,64
[23,1,13,11,8],24,[34,25,98,42,64] 调换
[23,1,13,11,8],24,[34,25,98,42,64] i = 0,v = 0
[1,23,13,11,8],24,[25,34,98,42,64] i = 1,v = 0
[1,23,13,11,8],24,[25,34,42,98,64] i = 2,v= 1
[1,8,13,11,23],24,[25,34,42,64,98]
[1],8,[13,11,23],24,[25,34,42],64,98
[1],8,[23,11,13]
[1],8,[11,23,13]
[1],8,[11],[13],[23]
一些有用的链接
http://www.cnblogs.com/isun/archive/2009/04/25/1443603.html