ソート------スタックソート

1691 ワード

        ,           ,   。    ,             。
/*-------exchange---------- 
    :exchange;
     :        ;
     :            ;
    :   ; 
 -------------------------*/
void exchange(int *a, int *b)   
{   
    int t;   
    t = *a;   
    *a = *b;   
    *b = t;   
}   
  
/*-------part_sort---------- 
    :part_sort;
     :            ---     ;
     :       int n,       int *a;
    :   ; 
-------------------------*/    
int part_sort(int n, int *a)  //          
{   
    int temp, t, i;   
       
    for( i = n / 2; i >= 1; i--)   
    {   
        temp = 2 * i;   
        if(temp <= (n-1) && a[temp] < a[temp+1])   
        {   
            temp++;   
        }   
  
        if(a[i] < a[temp])   
        {   
            exchange(&a[i], &a[temp]);   
        }   
    }   
}   
/*-------heapsort----------
    :heapsort;
     :         ,    ,    ;
     :       int *a,        int n;
    :   int ; 
-------------------------*/
int heapsort(int *a, int n)  //  n          ,        ;<BR>{   
    int temp;   
  
    if(n == 1)   
    {   
        return 0;   
    }   
  
    part_sort(n, a);  //  a[1]....a[n].       ;   
  
    exchange(&a[1] , &a[n]);    //   a[1]                  a[n]        
  
    heapsort(a, n-1);//  a[n]      ,      a[1].......a[n-1].    ;   
  
    return 1;   
  
}