js常用排序实现代码


Posted in Javascript onDecember 28, 2010
<script> 
Array.prototype.swap = function(i, j) 
{ 
var temp = this[i]; 
this[i] = this[j]; 
this[j] = temp; 
} Array.prototype.bubbleSort = function() 
{ 
for (var i = this.length - 1; i > 0; --i) 
{ 
for (var j = 0; j < i; ++j) 
{ 
if (this[j] > this[j + 1]) this.swap(j, j + 1); 
} 
} 
} 
Array.prototype.selectionSort = function() 
{ 
for (var i = 0; i < this.length; ++i) 
{ 
var index = i; 
for (var j = i + 1; j < this.length; ++j) 
{ 
if (this[j] < this[index]) index = j; 
} 
this.swap(i, index); 
} 
} 
Array.prototype.insertionSort = function() 
{ 
for (var i = 1; i < this.length; ++i) 
{ 
var j = i, value = this[i]; 
while (j > 0 && this[j - 1] > value) 
{ 
this[j] = this[j - 1]; 
--j; 
} 
this[j] = value; 
} 
} 
Array.prototype.shellSort = function() 
{ 
for (var step = this.length >> 1; step > 0; step >>= 1) 
{ 
for (var i = 0; i < step; ++i) 
{ 
for (var j = i + step; j < this.length; j += step) 
{ 
var k = j, value = this[j]; 
while (k >= step && this[k - step] > value) 
{ 
this[k] = this[k - step]; 
k -= step; 
} 
this[k] = value; 
} 
} 
} 
} 
Array.prototype.quickSort = function(s, e) 
{ 
if (s == null) s = 0; 
if (e == null) e = this.length - 1; 
if (s >= e) return; 
this.swap((s + e) >> 1, e); 
var index = s - 1; 
for (var i = s; i <= e; ++i) 
{ 
if (this[i] <= this[e]) this.swap(i, ++index); 
} 
this.quickSort(s, index - 1); 
this.quickSort(index + 1, e); 
} 
Array.prototype.stackQuickSort = function() 
{ 
var stack = [0, this.length - 1]; 
while (stack.length > 0) 
{ 
var e = stack.pop(), s = stack.pop(); 
if (s >= e) continue; 
this.swap((s + e) >> 1, e); 
var index = s - 1; 
for (var i = s; i <= e; ++i) 
{ 
if (this[i] <= this[e]) this.swap(i, ++index); 
} 
stack.push(s, index - 1, index + 1, e); 
} 
} 
Array.prototype.mergeSort = function(s, e, b) 
{ 
if (s == null) s = 0; 
if (e == null) e = this.length - 1; 
if (b == null) b = new Array(this.length); 
if (s >= e) return; 
var m = (s + e) >> 1; 
this.mergeSort(s, m, b); 
this.mergeSort(m + 1, e, b); 
for (var i = s, j = s, k = m + 1; i <= e; ++i) 
{ 
b[i] = this[(k > e || j <= m && this[j] < this[k]) ? j++ : k++]; 
} 
for (var i = s; i <= e; ++i) this[i] = b[i]; 
} 
Array.prototype.heapSort = function() 
{ 
for (var i = 1; i < this.length; ++i) 
{ 
for (var j = i, k = (j - 1) >> 1; k >= 0; j = k, k = (k - 1) >> 1) 
{ 
if (this[k] >= this[j]) break; 
this.swap(j, k); 
} 
} 
for (var i = this.length - 1; i > 0; --i) 
{ 
this.swap(0, i); 
for (var j = 0, k = (j + 1) << 1; k <= i; j = k, k = (k + 1) << 1) 
{ 
if (k == i || this[k] < this[k - 1]) --k; 
if (this[k] <= this[j]) break; 
this.swap(j, k); 
} 
} 
} 
function generate() 
{ 
var max = parseInt(txtMax.value), count = parseInt(txtCount.value); 
if (isNaN(max) || isNaN(count)) 
{ 
alert("个数和最大值必须是一个整数"); 
return; 
} 
var array = []; 
for (var i = 0; i < count; ++i) array.push(Math.round(Math.random() * max)); 
txtInput.value = array.join("\n"); 
txtOutput.value = ""; 
} 
function demo(type) 
{ 
var array = txtInput.value == "" ? [] : txtInput.value.replace().split("\n"); 
for (var i = 0; i < array.length; ++i) array[i] = parseInt(array[i]); 
var t1 = new Date(); 
eval("array." + type + "Sort()"); 
var t2 = new Date(); 
lblTime.innerText = t2.valueOf() - t1.valueOf(); 
txtOutput.value = array.join("\n"); 
} 
</script> 
<body onload=generate()> 
<table style="width:100%;height:100%;font-size:12px;font-family:宋体"> 
<tr> 
<td align=right> 
<textarea id=txtInput readonly style="width:100px;height:100%"></textarea> 
</td> 
<td width=150 align=center> 
随机数个数<input id=txtCount value=500 style="width:50px"><br><br> 
最大随机数<input id=txtMax value=1000 style="width:50px"><br><br> 
<button onclick=generate()>重新生成</button><br><br><br><br> 
耗时(毫秒):<label id=lblTime></label><br><br><br><br> 
<button onclick=demo("bubble")>冒泡排序</button><br><br> 
<button onclick=demo("selection")>选择排序</button><br><br> 
<button onclick=demo("insertion")>插入排序</button><br><br> 
<button onclick=demo("shell")>谢尔排序</button><br><br> 
<button onclick=demo("quick")>快速排序(递归)</button><br><br> 
<button onclick=demo("stackQuick")>快速排序(堆栈)</button><br><br> 
<button onclick=demo("merge")>归并排序</button><br><br> 
<button onclick=demo("heap")>堆排序</button><br><br> 
</td> 
<td align=left> 
<textarea id=txtOutput readonly style="width:100px;height:100%"></textarea> 
</td> 
</tr> 
</table> 
</body>
Javascript 相关文章推荐
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
Jquery跳到页面指定位置的方法
May 12 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
第一次接触神奇的前端框架vue.js
Dec 01 Javascript
利用Js+Css实现折纸动态导航效果实例源码
Jan 25 Javascript
js 用于检测类数组对象的函数方法
May 02 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
Sep 06 jQuery
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
Jul 27 Javascript
jQuery实现计算器功能
Oct 19 jQuery
深入理解Javascript闭包 新手版
Dec 28 #Javascript
prettify 代码高亮着色器google出品
Dec 28 #Javascript
Pro JavaScript Techniques学习笔记
Dec 28 #Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 #Javascript
JavaScript动态调整TextArea高度的代码
Dec 28 #Javascript
JavaScript性能陷阱小结(附实例说明)
Dec 28 #Javascript
javascript写的日历类(基于pj)
Dec 28 #Javascript
You might like
smarty的保留变量问题
2008/10/23 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
javascript实现轮显新闻标题链接
2007/08/13 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
2013/04/24 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python使用django搭建web开发环境
2017/06/09 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Django websocket原理及功能实现代码
2020/11/14 Python
法国在线药房:DoctiPharma
2020/10/21 全球购物
酒店保洁主管岗位职责
2013/11/28 职场文书
高中运动会广播稿
2014/09/16 职场文书
模范班主任事迹材料
2014/12/17 职场文书
大学生暑期实践报告
2015/07/13 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技