#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define N0 100000
typedef int keytype;
typedef struct node
{ keytype key;
}Etp;
Etp R[N0+1]; // R[1]..R[n]
int n=50, count;
void readData( Etp R[], int n)
{ int i;
count=0;
srand( time( NULL ));
for( i=1; i<=n; i++)
R[i].key=1000+
(int)((9999.0-1000)*rand()/RAND_MAX); // 0..RAND_MAX
}
void printData( Etp R[], int n )
{ int i;
for( i=1; i<=n; i++)
printf("%8d%s",
R[i].key, i%5==0?"\n":"");
printf("\ncount=%d\n", count);
}
void bubberSort( Etp R[], int n )
{ int i,j;
bool swap;
for( i=1; i<=n-1; i++)
{ swap=false;
for( j=1; j<=n-i; j++)
if( count++,R[j].key>R[j+1].key )
{ R[0]=R[j];
R[j]=R[j+1];
R[j+1]=R[0];
swap=true;
}
if( !swap ) break;
}
}
void bubberSort1( Etp R[], int n )
{ int j;
for( j=1; j<=n-1; j++)
if( count++,R[j].key>R[j+1].key )
{ R[0]=R[j];
R[j]=R[j+1];//________;
R[j+1]=R[0];
}
if( n>1 ) bubberSort1( R, n-1); //___________;
}
void selectSort( Etp R[], int n )
{ int i,j,k;
for( i=1; i<=n-1; i++)
{
k=i;
for( j=i+1; j<=n; j++)
if( count++,R[j].key<R[k].key ) k=j;
if( k!=i )
{ R[0]=R[i];
R[i]=R[k];
R[k]=R[0];
}
}
}
void insertSort( Etp R[], int n )
{ int i,j;
for( i=2; i<=n; i++)
{
R[0]=R[i];
j=i-1;
while( count++,R[j].key>R[0].key ) R[j+1]=R[j--];
R[j+1]=R[0];
count++;
}
}
void sift( Etp R[], int i, int m)
{ int k=2*i;
R[0]=R[i];
while( k<=m )
{ if( count++, k+1<=m && R[k+1].key>R[k].key) k++;
if( count++,R[0].key<R[k].key ) R[i]=R[k];
else break;
i=k;
k=2*i;
}
R[i]=R[0];
}
void heapSort( Etp R[], int n )
{ int j;
for( j=n/2; j>=1; j--) sift( R, j, n);
for( j=n; j>=2; j--)
{ R[0]=R[1];
R[1]=R[j];
R[j]=R[0];
sift( R, 1, j-1 );
}
}
int main()
{
readData( R, n );
bubberSort1( R, n );
printData( R, n);
readData( R, n );
selectSort( R, n );
printData( R, n);
readData( R, n );
insertSort( R, n );
printData( R, n);
readData( R, n );
heapSort( R, n );
printData( R, n);
return 0;
}
符合要求的加分(qq:182285777)