运行快速排序时 JavaScript 崩溃

标签 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>

最佳答案

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

关于运行快速排序时 JavaScript 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24959684/

相关文章:

php - 按列值将 2D 数组排序为不超过 N 个同类的重复升序组

java - 为什么 java.util.Arrays 使用两种排序算法?

java - 按键和值排序

algorithm - QuickSort分区的循环不变量

javascript - 从类静态方法调用 ES6 类构造函数

javascript - NetInfo.addEventListener 在 react native 中不起作用

javascript - angular-bootstrap 日期选择器显示 'yyyy-mm-dd' 格式的错误日期

javascript - 如何允许用户在 Node JS Passport JS 失败后尝试使用不同的电子邮件?

ruby-on-rails - ruby rails : How to sort a collection_select

arrays - 从主数组中抓取某些行插入到另一个数组中以复制到目标表中