var array=[19,95,10,27,8]; 
function QuickSort(left,right) 
{
  if(left>=right)
    return;
  var key=array[left];
  while(right>left)
  {
    while(right>left&&array[right]>=key) right--;
    array[left]=array[right]; 
    while(right>left&&array[left]<=key) left++; 
    array[right]=array[left]; 
  } 
  array[left]=key;
  QuickSort(0,left-1);
  QuickSort(left+1,array.length-1); 

QuickSort(0,array.length-1); 
document.write(array);
以上代码是实现快速排序的,但最后输出不了结果,我是了下,发现注释了QuickSort函数里调用自身递归的其中一条,就正常,不知道是为什么,大家帮忙看看是怎么回事啊

解决方案 »

  1.   

    array[left]<=key改为array[right]<=key
      

  2.   

    不明白这是什么意思,我那行是从左边开始比较,大过key的就移到key所在的位置啊,没有写错吧
    而且改了也无法输出结果
      

  3.   

    难不成你还想两个自身调用的递归会同时执行
    QuickSort(0,left-1);
    QuickSort(left+1,array.length-1); 
    表示不懂
      

  4.   


    <script>
    function getMedian(p,q){
    var r = Math.floor((p+q)/2);
    if(array[p]<array[r]){
    if(array[p]>=array[q]) return p;
    else{
    if(array[q]>=array[r]) return r;
    else return q;
    }
    }
    else{
    if(array[r]>=array[q]) return r;
    else{
    if(array[p]>=array[q]) return q;
    else return p;
    }
    }
    }
    function partition(f,l){
    var i,j,m,t,temp;
    i = f;
    j = l;
    t = getMedian(i,j);
    m = array[t];
    while(i<=j){
    while(j>=f && array[j]>=m){
    j--;
    }
    while(i<=l && array[i]<m){
    i++;
    }
    if(i<j){
    temp = array[i];
    array[i] = array[j];
    array[j] = temp
    i++;
    j--;
    }
    }
    if(i==f){
    temp = array[i];
    array[i] = array[t];
    array[t]= temp;
    i++;
    }
    return i;
    }function quickSort(f,l){
    if(f >= l) return;
    var k = partition(f,l);
    quickSort(f,k-1);
    quickSort(k,l);
    }
    var array=[19,95,10,27,8]; 
    quickSort(0,array.length-1);
    document.write(array);
    </script>
      

  5.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script type="text/javascript">        function Partition(arr, left, right) {
                var pivokey = arr[left];
                while (left < right) {
                    while (left < right && arr[right] > pivokey) {
                        right--;
                    }
                    arr[left] = arr[right];
                    while (left < right && arr[left] < pivokey) {
                        left++;
                    }
                    arr[right] = arr[left];
                }
                arr[left] = pivokey;
                return left;
            }
            function QuickSort(arr, left, right) {
                if (left < right) {
                    var pivoloc = Partition(arr, left, right);
                    QuickSort(arr, left, pivoloc - 1);
                    QuickSort(arr, pivoloc + 1, right);
                }
            }
           
        </script>
    </head>
    <body>
    <script type="text/javascript">var arr = [3, 5, 6, 1, 2, 7, 8, 4]
    QuickSort(arr, 0, arr.length-1);
    alert(arr);</script>
    </body>
    </html>
      

  6.   

    你的问题在于这句:
    QuickSort(0,left-1);
    第一个参数,始终都是0,它是递归调用的。分隔后的第一个参数是变的。而你始终都是数组的第一个位置。