运行quicksort时javascript崩溃

时间:2014-07-25 15:50:48

标签: javascript sorting 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>

2 个答案:

答案 0 :(得分:1)

除非您只是为了好玩而实现快速排序,否则请考虑在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

答案 1 :(得分:0)

试试这段代码

<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(' ');
   }