/***************** * jims_insertionsort.c * * Jim's implementation of insertion sort, * using template for sorting in C, * class exercise March 17. * * For C syntax and libraries, see * https://cs.marlboro.college/courses/spring2016/systems/c_refcard.pdf * * $ gcc jims_insertsort.c -o jims_insertsort * $ ./jims_insertsort * -- sorting -- * (max int is 2147483647 ; max random is 2147483647 ; a random is 613560990 * * initial numbers: * [83, 25, 67, 57, 29, 75, 33, 91, ] * invariant check: i=1, array=[25, ] * Yes, invariant is OK. * invariant check: i=2, array=[25, 67, ] * Yes, invariant is OK. * invariant check: i=3, array=[25, 57, 67, ] * Yes, invariant is OK. * invariant check: i=4, array=[25, 29, 57, 67, ] * Yes, invariant is OK. * invariant check: i=5, array=[25, 29, 57, 67, 75, ] * Yes, invariant is OK. * invariant check: i=6, array=[25, 29, 33, 57, 67, 75, ] * Yes, invariant is OK. * invariant check: i=7, array=[25, 29, 33, 57, 67, 75, 83, ] * Yes, invariant is OK. * sorted numbers: * [25, 29, 33, 57, 67, 75, 83, 91, ] * elapsed time is 0.00008200 seconds * * Jim Mahoney | cs.bennington.college | MIT License | March 2022 *****************/ #include #include #include #include double get_secs(){ // return time since program launch clock_t ticks = clock(); double seconds = (double)ticks / (double)CLOCKS_PER_SEC; //printf(" ticks since epoch = %lu ; ", ticks); // debug //printf(" ticks per second = %d \n", CLOCKS_PER_SEC); // . //printf(" seconds = %.6f \n", seconds); // . return seconds; } int* get_randoms(int n, int maxvalue){ // return array of n random numbers, randoms[0] to randoms[n-1], // each random 0 to maxvalue int i; int* randoms = malloc(n * sizeof(int)); for (i=0; i0 && numbers[j-1] > numbers[j]){ temp = numbers[j]; numbers[j] = numbers[j-1]; numbers[j-1] = temp; j = j - 1; } // check loop invariant ... are numbers[0...i] in order? if (! assert_invariant(i, numbers)){ printf(" OOPS - loop invariant failed!! "); } i = i + 1; // print_array(n, numbers); } } int main(){ int* randoms; int n = 8; double start, stop; start = get_secs(); init_randoms(); printf(" -- sorting -- \n"); printf(" (max int is %d ;", INT_MAX); printf(" max random is %d ;", RAND_MAX); printf(" a random is %d.) \n\n", rand()); randoms = get_randoms(n, 100); printf("initial numbers: \n "); print_array(n, randoms); printf("\n"); sort(n, randoms); printf("sorted numbers: \n "); print_array(n, randoms); printf("\n"); stop = get_secs(); printf(" elapsed time is %.8f seconds \n", stop - start); return 0; }