#include #include #include struct timeval start_time, stop_time; int elapsed; #define SWAP(A,B) {int temp=A;A=B;B=temp;} void printArray(int a[], int n) ; // A function to sort the algorithm using Odd Even sort void oddEvenSort(int a[], int n) { int isSorted = 0; // Initially array is unsorted int i; while (!isSorted) { isSorted = 1; // Assume the array is sorted... // Even phase for (i = 0; i < n-1; i = i + 2) { if (a[i] > a[i+1]) { SWAP(a[i], a[i+1]); isSorted = 0; // Detects that array was not sorted } } if ( n < 1000 ) { printf(" Even: "); printArray(a, n); } // Odd phase for (i = 1; i < n-1; i = i + 2) { if (a[i] > a[i+1]) { SWAP(a[i], a[i+1]); isSorted = 0; // Detects that array was not sorted } } if ( n < 1000 ) { printf(" Odd: "); printArray(a, n); printf("\n"); } } return; } // A utility function ot print an array of size n void printArray(int a[], int n) { for (int i=0; i < n; i++) printf("%d ", a[i]); printf("\n"); } // Driver program to test above functions. int main (int argc, char *argv[]) { int *arr; int n; int i; if (argc < 2) { printf("Usage error: %s N (N=# elements in array to sort)\n", argv[0]); exit(1); } n = atoi( argv[1] ); arr = calloc(n, sizeof(int)); for ( i = 0 ; i < n; i++ ) arr[i] = rand()%1000; if ( n < 1000 ) { printf(" "); printArray(arr, n); } gettimeofday(&start_time, NULL); // Record current sys time as start_time oddEvenSort(arr, n); gettimeofday(&stop_time, NULL); // Record current sys time as stop_time elapsed = (stop_time.tv_sec*1000000 + stop_time.tv_usec) - (start_time.tv_sec*1000000 + start_time.tv_usec); printf("Elasped time = %d micro secs\n", elapsed); if ( n < 1000 ) { printf(" "); printArray(arr, n); } // Check if array is sorted... int min = arr[0]; for ( i = 1; i < n; i++ ) { if ( arr[i] < min ) { printf("Sort error detected: %d %d !!!\n", min, arr[i]); exit(1); } min = arr[i]; } return (0); }