using System;namespace sort
{
/// <summary>
/// sort の概要の説明です。
/// </summary>
public class sort
{
private int low;
private int high;
private int[] A; public void  QuickSort(int A, int low , int high)
{
if(low<high)
{
int pivotpos=Partition(A ,low , high) ;      QuickSort(A, low , pivotpos-1);
 QuickSort(A,  pivotpos+1 ,high);
}
}
public int Partition(int[] A,int low ,int high) {
int i=low ;
int j=high;  int pivot =A[i];                                 // 用区间的第 1 个记录作为基准 ' 
while(i!=j)
{
while (i<j&&A[j]>=pivot)                       //pivot 相当于在位置 i 上 
j--;                                          // 从右向左扫描,查找第 1 个关键字小于 pivot.key 的记录 low[j] 
if(i<j)                                          // 如果找到一个小于pivot的数;
A[i++]=A[j];                          //low[i]和low[j]交换后,i指针加1;
while(i<j&&A[i]<=pivot)                       //pivot 相当于在位置 j 上
i++;                                        // 从左向右扫描,查找第 1 个关键字大于 pivot 的记录low[i] 
if(i<j)                                         // 如果找到一个大于pivot的数;
A[j--]=A[i];                         // 相当于交换 low[i] 和 low[j] ,交换后 j 指针减 1
}
A[i]=pivot;                                    // 基准记录已被最后定位
return i ;
}


public class MainClass {

public static void  Main() {
A = new int[]                   {9,8,7,4,3,35,4,5,3,21,1,4,57,2,123,4,0}; sort S = new sort();
S.QuickSort(A ,0,16);

for(int m=0; m<12;m++)
Console.Write(A[m]+ "  ");
}

} }
}

解决方案 »

  1.   

    自力更生
    调试成功!using System;namespace sort
    {
    /// <summary>
    /// sort の概要の説明です。
    /// </summary>
    public class sort
    {
     public   int low;
     public   int high;
     public   int[] A; public void  QuickSort(int[] A, int low , int high)
    {
    if(low<high)
    {
    int pivotpos=Partition(A ,low , high) ;      QuickSort(A, low , pivotpos-1);
     QuickSort(A,  pivotpos+1 ,high);
    }
    }
    public int Partition(int[] A,int low ,int high) {
    int i=low ;
    int j=high;  int pivot =A[i];                                 // 用区间的第 1 个记录作为基准 ' 
    while(i!=j)
    {
    while (i<j&&A[j]>=pivot)                       //pivot 相当于在位置 i 上 
    j--;                                          // 从右向左扫描,查找第 1 个关键字小于 pivot.key 的记录 low[j] 
    if(i<j)                                          // 如果找到一个小于pivot的数;
    A[i++]=A[j];                          //low[i]和low[j]交换后,i指针加1;
    while(i<j&&A[i]<=pivot)                       //pivot 相当于在位置 j 上
    i++;                                        // 从左向右扫描,查找第 1 个关键字大于 pivot 的记录low[i] 
    if(i<j)                                         // 如果找到一个大于pivot的数;
    A[j--]=A[i];                         // 相当于交换 low[i] 和 low[j] ,交换后 j 指针减 1
    }
    A[i]=pivot;                                    // 基准记录已被最后定位
    return i ;
    }


    public class MainClass {

    public static void  Main() {
    int[] A = new int[]{9,8,7,3,35,5,3,21,1,57,2,123,4,0}; sort S = new sort();
    S.QuickSort(A ,0,13);

    for(int m=0; m<14;m++)
    Console.Write(A[m]+ "  ");
    }

    } }
    }