因为后面的 do i++ 部分,因为第一次执行循环时会先+1的

解决方案 »

  1.   

    i = left-1; 
    j = right +1;
    do
    {
    do i++; while (l[i] < l[left]);
      

  2.   

    用这么绕么?static void QuickSort(int[] a, int l, int r) 
            {
                int left = l;
                int right = r;
                int pivot = a[(l + r) / 2];
                int temp;
                while (l < r)
                {
                    while (a[l] < pivot) { ++l; }
                    while (a[r] > pivot) { --r; }
                    if (l >= r) break;
                    temp = a[l];
                    a[l] = a[r];
                    a[r] = temp;
                    if (a[l] != pivot) { ++l; }
                    if (a[r] != pivot) { --r; }
                }            
                if (left < r) { QuickSort(a, left, l - 1); }          
                if (l < right) { QuickSort(a, r + 1, right); }
            }
            static void Main(string[] args)
            {
                int[] aa ={ 74, 5, 78, 2, 46, 32, 10, 97, 34 };
               
                QuickSort(aa, 0, 8);
             
                for (int i = 0; i < aa.Length; i++) 
                {
                    Console.WriteLine(aa[i]);
                }
                Console.Read();
            }
      

  3.   

    因为left已经走到right右边(下一位)去了。
      

  4.   

    第一轮的时候,不就应该是将下标为0的元素作为分割元素,然后从下标为1的元素向后找么,那么left被赋值为0,然后i=left时,i=0;进人下面的循环,i++不正好变为1么