运行快速排序时Javascript崩溃
javascript crashing when running quicksort
我试图在javascript中编写快速排序并显示排序的输出。但是每当我运行execute()函数时,程序就会挂起并停止响应。为什么会这样?我对javascript不太熟悉,我只是从我的java代码翻译过来的。但我就是不明白为什么不行。代码如下:
<script type="text/javascript">
function exchange(a, i, j) {
var k = a[i];
a[i] = a[j];
a[j] = k;
}
function partition(a2, lo, hi) {
var i2 = lo;
var j2 = hi + 1;
var v = a2[lo];
while (true) {
while (a2[++i2] < v) {
if (i2 == hi) {
break;
}
}
while (v < a2[--j2]) {
if (j2 == lo) {
break;
}
}
if (i2 >= j2) {
break;
}
exchange(a2, i2, j2);
}
exchange(a2, lo, j2);
return j2;
}
function sort(a3, lo2, hi2) {
var j3 = partition(a3, lo2, hi2);
sort(a3, lo2, j3 - 1);
sort(a3, j 3+ 1, hi2);
}
function sort(a4) {
sort(a4, 0, a.length - 1);
}
function execute() {
var array = document.getElementById("texts").value.split(' ');
sort(array);
for (a in array) {
document.write(array[a] + "<br>");
}
}
</script>
除非您只是为了好玩而实现快速排序,否则请考虑在Array对象上使用sort()
方法:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort(); // result: Apple,Banana,Mango,Orange
当对数字排序时,传递一个函数给sort()
来决定是按升序排序还是降序排序:
var numbers = [2,41,5,2,16,7];
numbers.sort(function (a,b) { return a-b; });
// result: 2,2,5,7,16,41
如果您想在JavaScript中实现快速排序只是为了好玩,请考虑阅读:http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/。它给出了一个很好的算法演练,以及一些示例代码。
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
试试这个代码
<html>
<head>
<title>Quicksort</title>
<script type="text/javascript" src="quicksort.js" >
</script>
</head>
<body>
<form id="qsform" action="" method="" >
<input type="text" size="80" name="unsorted" value="S C K U P E M I B R" /> <br />
<input type="button" name="sort" value="Sort" onclick="dosort(this.form)" /> <br />
<input type="text" size="80" name="sorted" value="" />
</form>
</body>
</html>
,此表单的javascript代码如下
所示。 Array.prototype.swap=function(i, j)
{
var tmp=this[i];
this[i]=this[j];
this[j]=tmp;
}
function partition(array, a2, lo, hi)
{
var piv=array[hi];
array.swap(hi, lo-1);
var store=a2;
var ix;
for(ix=a2; ix<lo-1; ++ix) {
if(array[ix]<=piv) {
array.swap(store, ix);
++store;
}
}
array.swap(lo-1, store);
return store;
}
function qsort(array, a2, lo)
{
if(lo-1>a2) {
var hi=a2+Math.floor(Math.random()*(lo-a2));
hi=partition(array, a2, lo, hi);
qsort(array, a2, hi);
qsort(array, hi+1, lo);
}
}
function quick_sort(array)
{
qsort(array, 0, array.length);
}
function dosort(form)
{
var array=form.unsorted.value.split(/ +/);
quick_sort(array);
form.sorted.value=array.join(' ');
}
相关文章:
- Javascript-食物总数数组崩溃
- javascript audio currentTime使一些浏览器崩溃
- Javascript播放音频后其他没有音频崩溃
- Javascript筛选器数组抛出错误并崩溃
- 试图修复一个倒计时计时器问题,该问题导致计时器运行,然后在使用Javascript时崩溃约10秒
- 浏览器11上的Javascript location.href崩溃
- Chrome在尝试从Javascript修改CSS3动画时崩溃
- Javascript游戏与循环崩溃浏览器
- Javascript正则表达式文件类型崩溃chrome
- IE11在基于Kendo/JavaScript的web应用程序中崩溃
- 如何使用Javascript防止页面滚动上的剑道下拉列表崩溃
- JavaScript崩溃iPad浏览器
- 浏览器在尝试获取数字的最大素因数(Javascript)时崩溃
- 高效的Javascript组合函数,不会使浏览器崩溃
- JavaScript 冻结/崩溃在 Chrome 中
- AJAX 查询工作 50+ 次,然后崩溃 JavaScript
- JavaScript代码首先使用setTimeout工作,但随后崩溃或不起作用
- 基本的JavaScript使网站崩溃
- 从 JSON(db 查询结果)加载大型 javascript 数组而不会使页面崩溃
- XMLHttpRequest点击太多-脚本崩溃(JavaScript)