Javascript错误中的快速排序

Javascript错误中的快速排序,javascript,quicksort,Javascript,Quicksort,希望通过Javascript中的这种快速排序算法得到一些帮助(这不是为了家庭作业或其他什么,只是为了好玩)——它不起作用,我也不确定哪里出了问题 function quicksort ( arr ) { // Launch the sorting process. sort(arr, 0, arr.length - 1 ); /** * swap * takes in an array and two inde

希望通过Javascript中的这种快速排序算法得到一些帮助(这不是为了家庭作业或其他什么,只是为了好玩)——它不起作用,我也不确定哪里出了问题

function quicksort ( arr ) {
        // Launch the sorting process.
        sort(arr, 0, arr.length - 1 );

        /**
         * swap
         * takes in an array and two indexes,
         * swaps the elements in the array at those indexes
         */
        function swap ( arr, a, b ) {
            var temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }

        function partition ( arr, l, r) {
            var p = arr[r],
                i = l - 1,
                j = l;
            while ( j < r - 1) {
                if (arr[j] <= p) {
                    swap ( arr, ++i, j );
                }
                j++;
            }

            swap (arr, i + 1, r);
            return i + 1;
        }

        function sort ( arr, l, r ) {
            var p;
            if (l < r) {
                p = partition( arr, l, r );
                sort( arr, l, p - 1);
                sort( arr, p + 1, r);
            } else {
                console.log(arr);    
            }
        }
    }
函数快速排序(arr){
//启动排序过程。
排序(arr,0,arr.length-1);
/**
*交换
*接受一个数组和两个索引,
*在这些索引处交换数组中的元素
*/
功能交换(arr、a、b){
var-temp=arr[a];
arr[a]=arr[b];
arr[b]=温度;
}
功能分区(arr、l、r){
var p=arr[r],
i=l-1,
j=l;
而(j如果(arr[j]好的,我想我找到了。问题就在我的分区循环中,我结束它太早了。下面是完整的代码:

  function quicksort ( arr ) {
        // Launch the sorting process.
        sort(arr, 0, arr.length - 1 );

        /**
         * swap
         * takes in an array and two indicies,
         * swaps the elements in the array at those indicies
         */
        function swap ( arr, a, b ) {
            var temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }

        function partition ( arr, l, r) {
            var p = arr[r],
                i = l - 1,
                j = l;
            while ( j < r) {
                if (arr[j] <= p) {
                    swap ( arr, ++i, j );
                }
                j++;
            }
            // Put the pivot in its correct place
            swap (arr, i + 1, r);
            return i + 1;
        }

        function sort ( arr, l, r ) {
            var p;
            if (l < r) {
                p = partition( arr, l, r );
                sort( arr, l, p - 1);
                sort( arr, p + 1, r);
            } else if (l === arr.length) {
                // Output the sorted array.
                console.log(arr);    
            }
        }
    }
函数快速排序(arr){
//启动排序过程。
排序(arr,0,arr.length-1);
/**
*交换
*接受一个数组和两个标记,
*在这些标记处交换数组中的元素
*/
功能交换(arr、a、b){
var-temp=arr[a];
arr[a]=arr[b];
arr[b]=温度;
}
功能分区(arr、l、r){
var p=arr[r],
i=l-1,
j=l;
while(jif(arr[j]你的代码以什么方式不工作?我给它快速排序([8,3,2,1,5,1,3]),它返回:[1,3,2,3,5,8,1]对不起,没有移位就按enter键并触发了一个过早的post。你是否尝试过放置任何类型的跟踪语句(例如console.log()语句)在代码中查看发生了什么?是的,谢谢,我实际上通过添加这些检查并分析它们来解决问题。+1非常有趣的分区:比通常的左右边界方法更紧密的局部性,我今天学到了一些东西:D