附代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 快速排序 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="json2.js"></script>
<script>
/*在快速排序中,记录的比较和交换是从两端向中间
进行的,关键字较大的记录一次就能交换到后面单
元,关键字较小的记录一次就能交换到前面单元,
记录每次移动的距离较大,因而总的比较和移动次
数较少。*/
//快速排序是一种不稳定排序
var arr=[];
function init(){
var tempArr=$("#arr1").val().split(",");
arr=[];
for(var i=0;i<tempArr.length;i++){
arr.push(parseInt(tempArr[i]));
}
$("#detail").html('');
}
function sort(){
qSort(0,arr.length-1);
$("#detail").append("最终排序结果:"+arr+"<br/>");
}
function qSort(p,r){
if(p<r){
var q=partition(p,r);//以a[p]为基准元素将a[p:r]划分成3段a[p:q-1],a[q]和a[q+1:r],使得a[p:q-1]中任何元素小于等于a[q],a[q+1:r]中任何元素大于等于a[q]。下标q在划分过程中确定。
//alert("p="+p+";q="+q+";r="+r);
qSort(p,q-1);
qSort(q+1,r);
}
}
function partition(p,r){
//alert("p="+p+":r="+r);
var i=p;
var j=r;
var x=arr[p];
while(i<j)
{
//从右边找到小于基准数字的索引
while(arr[j]>=x&&i<j){
j--;
}
//从左边做到大于基准数字的索引
while(arr[i]<=x&&i<j){
i++;
}
//交换
if(i<j){
$("#detail").append("交换:"+arr[i]+":"+arr[j]+"<br/>");
var temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
arr[p]=arr[j];
arr[j]=x;
$("#detail").append("p="+p+";r="+r+";arr="+arr+"; q="+j+"<br/>");
return j;
}
</script>
</HEAD>
<BODY style="text-align:center">
数据:
<input type="text" name="arr1" id="arr1" style="width:600px" value="2,1,3,8,5,7,6,4,10"/>
<br/>
<input type="button" value="初始化" οnclick="init()"/>
<input type="button" value="快速排序" οnclick="sort()"/>
<br/>
排序结果:<label id="lab2"></label><br/>
<div id="detail" style="border:1px solid blue;width:500px;height:100%;margin:0 auto;text-align:left;padding-left:20px;">
</div>
</BODY>
</HTML>