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 入门教程 [翻译] 推荐
Aug 17 Javascript
range 标准化之获取
Aug 28 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
May 16 Javascript
JS面试题---关于算法台阶的问题
Jul 26 Javascript
关于微信中a链接无法跳转问题
Aug 02 Javascript
js实现各浏览器全屏代码实例
Jul 03 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
vue实现菜单切换功能
May 08 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 Javascript
antd design table更改某行数据的样式操作
Oct 31 Javascript
深入理解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
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
java script编程起步(第三课)
2007/01/10 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
react中使用css的7中方式(最全总结)
2019/02/11 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
js实现动态时钟
2020/03/12 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
Python跳出多重循环的方法示例
2019/07/03 Python
python 实现矩阵按对角线打印
2019/11/29 Python
jupyter notebook实现显示行号
2020/04/13 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
python切割图片的示例
2020/11/12 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
旅游安全协议书
2014/04/21 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers