「クイックソートアルゴリズム」問題の分割アルゴリズム


/*
      :<>      -[       ]
      :   
      :2002 09 18 (21:43:00-22:03:00)
            “      ”           
*/
#include    "stdio.h"
#include    "stdlib.h"

//:============================“      ”         ===========================
/*
      :2002 09 18 (21:43:00-22:03:00)
            “      ”           
        :
                           。
        :
                              。    ,          ,
                             。              
           ,          1  。
              ,       ,    ,           ,  p[middle],
          temp = p[middle](    );
              ,            p[middle]    ;
              ,     i,j                      ;
                  ,  i = j  ;
              , array[i] = temp( tmep  array[i])。
*/
#define    MAXN    20

void    Carve_up(int array[],int number,int *m)
{
    int i,j,k,middle,temp;
    i = 0;
    j = number - 1;
    k = (i + j) / 2;
    //   i,j,k          
    if(array[i] >= array[j] && array[j] >= array[k])
        middle = j;        //Array[j]   
    else if(array[i] >= array[k] && array[k] >= array[j])
        middle = k;        //Array[k]   
    else
        middle = i;        //Array[i]   
    temp = array[middle];
    array[middle] = array[i];
    while(i != j)
    {
        while(i < j && array[j] >= temp)
            j --;    //j    ,      array[j] < temp  
        if(i < j)
        {
            array[i] = array[j];
            i ++ ;
            while(i < j && array[i] <= temp)
                i ++ ;    //i    ,      array[i] > temp  
            if(i < j)
            {
                array[j] = array[i];
                j --;
            }
        }
    }
    array[i] = temp;
    *m = i;
    return;
}
void    Quick_Sort(int array[],int number)
{
    int i;
    if(number > 1)
    {
        Carve_up(array,number,&i);
        Quick_Sort(array,i);
        Quick_Sort(&array[i + 1],number - i - 1);
    }
    return;
}
void    Run_Quick_Sort()
{
    int i,array[MAXN] = {1,9,3,7,18,2,20,4,16,5,15,6,14,7,13,6,12,8,11,10};
    Quick_Sort(array,MAXN);
    for(i = 0;i < MAXN;i++)
        printf("%3d",array[i]);
}
//:============================“      ”         ===========================

int main(int argc, char* argv[])
{
    Run_Quick_Sort();

    printf("         ! ");
    return 0;
}