ソート------スタックソート
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;
}