?? 13-3 快速排序.htm
字號:
?
+
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312" />
<title>13-3 快速排序</title>
<style>
* { font-size:12px; font-family:宋體, Arial; } /*規定了所有的字體樣式*/
body { overflow:auto; }
</style>
<script>
window.onload = function(){
var ary, st, re, timeCost;
//變量“timeCost”和“timeCost_a”用于記錄排序用時
timeCost = new Array();
//生成一個長度1000的隨機數組
ary = create_random_array(1000);
//記錄開始時間
st = new Date();
//快速排序
re = sort(ary);
//累計用時
timeCost[0] = ((new Date())-st);
//生成一個長度1000的順序數組
ary = create_ordered_array(1000);
st = new Date();
re = sort(ary);
timeCost[1] = ((new Date())-st);
//輸出結果
alert("隨機數組快速排序耗時 " + timeCost[0] + " 毫秒\r\n順序數組耗時 " + timeCost[1] + " 毫秒");
}
//新建一個指定長度的數組,并對其元素賦以隨機的數值
function create_random_array(len){
var re = new Array(len);
for(var i=0; i<len; i++)re[i] = Math.random();
return(re);
}
//新建一個指定長度的數組,并對其元素賦以順序的數值
function create_ordered_array(len){
var re = new Array(len);
for(var i=0; i<len; i++)re[i] = i;
return(re);
}
//快速排序算法
function sort(ary){
var len, ary1, ary2, mid, tmp;
len = ary.length;
if(len<3){
//當數組長度足夠小時,采取比較和交換來排序
if(len == 2 && ary[0]>ary[1]){
tmp = ary[0];
ary[0] = ary[1];
ary[1] = tmp;
}
return(ary);
}else{
//將數組的第一個元素作為基準
mid = ary[0];
//初始化左、右數組
ary1 = new Array();
ary2 = new Array();
//循環訪問數組元素并分割
for(var i=1; i<len; i++){
if(ary[i]<mid){
ary1.push(ary[i]);
}else{
ary2.push(ary[i]);
}
}
//遞歸調用本函數對子數組排序,然后將結果合并后返回
return(sort(ary1).concat(mid, sort(ary2)));
}
}
</script>
</head>
<body>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -