// ran.c: randomize array
#include <stdio.h>
#include <math.h>
#include "bubblesort.h"
#define ALPHA 26
double seed = 11111.0;
double rand();
void printr(double []);
void printa(int []);
int main() {
int A[ALPHA];
double R[ALPHA];
int i;
for (i = 0; i < 100; i++) rand();
for (i = 0; i < ALPHA; i++) {
A[i] = 'A' + i;
R[i] = rand();
}
printa(A);
printr(R);
doublebubble(R, A, 0, ALPHA-1);
printa(A);
printr(R);
}
void printr(double R[]) {
int i;
for (i = 0; i < ALPHA; i++)
printf("%20.16f\n", R[i]);
printf("\n");
}
void printa(int A[]) {
int i;
for (i = 0; i < ALPHA; i++)
printf("%c", A[i]);
printf("\n");
}
double rand() {
double a = 16807.0,
m = 2147483647.0;
double q;
seed = a*seed;
q = floor(seed/m);
seed = seed - q*m;
return(seed/m);
} | // bubblesort.h
void bubblesort(double [] , int , int );
void doublebubble(double [], int [], int, int);
int issorted(double [], int );
// bubblesort.c
#include <stdio.h>
#include "bubblesort.h"
static void exchange(double R[], int i, int j) {
double temp = R[i];
R[i] = R[j];
R[j] = temp;
}
static void exchange2(int A[], int i, int j) {
int itemp = A[i];
A[i] = A[j];
A[j] = itemp;
}
// bubblesort: sort array A
void bubblesort(double A[], int p, int r) {
int dummy;
int i;
double temp;
for (dummy = p; dummy < r; dummy++)
for (i = 0; i < r; i++)
if (A[i] > A[i+1]) {
exchange(A, i, i+1);
}
}
// doublebubble: sort R; rearrange A
void doublebubble(double R[], int A[],
int p, int r) {
int dummy;
int i;
double temp;
for (dummy = p; dummy < r; dummy++)
for (i = 0; i < r; i++)
if (R[i] > R[i+1]) {
exchange(R, i, i+1);
exchange2(A, i, i+1);
}
}
int issorted(double R[], int len) {
int i;
for (i = 0; i < len - 1; i++)
if (R[i] >= R[i+1]) return 0;
return 1;
}
|
cc -o ran -lm ran.c bubblesort.c
% ./ran
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0.2173017762681943
0.1909537395420269
0.3595004828458189
0.1246151896773908
0.4074929079075776
0.7333032026576359
0.6269270668862980
0.7632131580092074
0.3235466607490306
0.8487272089574147
0.5582009472689595
0.6833207494035926
0.5718352261799552
0.8346464065064892
0.9021541545643258
0.5048757626232112
0.4469424083116196
0.7610564933908435
0.0764844199067375
0.4736453725367996
0.5577762259905116
0.5450302225281625
0.3229500308274059
0.8211681162105725
0.3725291510915985
0.0974423964961629
|
SZDBAWICYEQTPVUKMGLFRHXNJO
0.0764844199067375
0.0974423964961629
0.1246151896773908
0.1909537395420269
0.2173017762681943
0.3229500308274059
0.3235466607490306
0.3595004828458189
0.3725291510915985
0.4074929079075776
0.4469424083116196
0.4736453725367996
0.5048757626232112
0.5450302225281625
0.5577762259905116
0.5582009472689595
0.5718352261799552
0.6269270668862980
0.6833207494035926
0.7333032026576359
0.7610564933908435
0.7632131580092074
0.8211681162105725
0.8346464065064892
0.8487272089574147
0.9021541545643258
|