public void QuickSort(int fore, int last)  //快速排序算法                  
        {
            int begin = fore;
            int end = last;
            int tem = data[fore];  //基准元素
            while (begin != end)   //当左右两端扫描未碰头时
            {
                if (data[end] < tem)  //当基准元素后面的元素大于基准元素后
                {
                    data[begin] = data[end];
                    while (begin != end)
                    {
                        if (data[begin] > tem)
                        {
                            data[end] = data[begin];
                            break;
                        }
                        else
                        {
                            begin++;  //向右挪动
                        }
                    }
                }
                //****************************
                else                        **
                {                           **  
                    end--;  //向左挪动      **  
                }                           **  
                //**************************** 
                // 改成 
                //end--; 
              /*
                 会产生错误,因为这样 end-- 语句必执行,而    
                 当上面的while语句执行完并跳出来后执行此语句使得本已满足  
                 begin!=end 的条件变成 end<begin 从而照样满足 begin!=end,
                 while循环继续执行导致数组下标越界  
              */                    

            }
            data[begin] = tem;
            if (fore !=begin)
            {
                int i = fore;
                int j= begin - 1;
                QuickSort(i,j);
            }
            if (begin != last)
            {
                int i= begin + 1;
                int j = last;
                QuickSort(i, j);
            }
        }
    }


本文转载:CSDN博客