摘抄自 《程序员实用算法》
/*-----bubble.c--------
*bubble sort an array
*#define DRIVER to compile a test driver
*Driver must be linked to sortsub.c
*_______________*/
#include "sorthdr.h"
#define DRIVER 1
void BubbleSort ( Element **Array,int N, CompFunc Compare)
{
int limit;
/* make steasdily shorter passes...*/
for (limit = N-1 ;limit>0; limit--)
{
int j,swapped;
/* on each pass,sweep largest element to end of arrey*/
swapped=0;
for ( j=0;j<limit;j++)
{
if (Compare(Array[j],Array[j+1])>0)
{
Element *temp;
temp=Array[j];
Array[j]=Array [j+1];
Array[j+1]=temp;
swapped=1;
}
}
if (!swapped )
break; /* if no swaps,we have finished */
}
}
#ifdef DRIVER
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sortsub.h"
/*
*A comparison function
*/
int Cfunc( Element *L ,Element *R)
{
return (strcmp (L->text,R->text,5));
}
void main ( int argc,char *argv[])
{
Element **Array;
int Items = 2000;
if ( argc !=2 && argc !=3)
{
fprintf ( stderr ," Usage:bubble infile {maxtems}\n");
return;
}
if (arqc==3 )
Items = atoi ( argv [2] );
if ( ( Items = LoadArray ( argv [1] , Items, &Array ))== -1)
return; /* couldn't load file */
BubbleSort ( Array,Items,( CompFunc) Cfunc);
ShowArray ( Array, Items , ( CompFunc) Cfunc );
}
#endif