📄 13-2 单向冒泡排序.htm
字号:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312" />
<title>13-2 单向冒泡排序</title>
<style>
* { font-size:12px; font-family:宋体, Arial; } /*规定了所有的字体样式*/
body { overflow:auto; }
</style>
<script>
window.onload = function(){
var ary, st, re, timeCost, timeCost_a;
//变量“timeCost”和“timeCost_a”用于记录排序用时
timeCost = timeCost_a = 0;
//生成一个长度1000的随机数组
ary = create_random_array(1000);
//记录开始时间
st = new Date();
//冒泡排序
re = sort(ary);
//累计用时
timeCost = ((new Date())-st);
ary = create_random_array(1000);
st = new Date();
//优化的冒泡排序
re = sort_a(ary);
timeCost_a = ((new Date())-st);
//输出结果
alert("冒泡排序耗时 " + timeCost + " 毫秒\r\n优化之后耗时 " + timeCost_a + " 毫秒");
}
//新建一个指定长度的数组,并对其元素赋以随机的数值
function create_random_array(len){
var re = new Array(len);
for(var i=0; i<len; i++)re[i] = Math.random();
return(re);
}
//冒泡排序算法
function sort(ary){
var len, ex, tmp;
len = ary.length;
for(var i=0; i<len; i++){
//重置是否发生交换的变量
ex = false;
for(var j=len-2; j>=i; j--){
if(ary[j+1]<ary[j]){
//交换相邻的两个元素
tmp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = tmp;
//记录发生了交换
ex = true;
}
}
//如果没有发生交换,表明已经排序完成
if(!ex)break;
}
return(ary);
}
//改进的排序算法
function sort_a(ary){
var len, ex, tmp, first_ex_index;
len = ary.length;
for(var i=0; i<len; i++){
ex = false;
//如果存在已保存的上一次交换位置,则自上一次交换发生的位置开始扫描
for(var j=first_ex_index?first_ex_index:(len-2); j>=i; j--){
if(ary[j+1]<ary[j]){
tmp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = tmp;
//如果此处第一次发生交换,则保存此位置
if(!ex)first_ex_index = j;
ex = true;
}
}
if(!ex)break;
}
return(ary);
}
</script>
</head>
<body>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -