Friday, 7 February 2014

Bubble Sort

Simple place holder for the code before I write asymptotic order e.t.c.
src/headers/bubble.h
#ifndef BUBBLE
#define BUBBLE

#include <stdbool.h>
#include <stdio.h>
#include <string.h>

char** bsort(unsigned int, char**);
void swap(const char** values, const unsigned int idx);
#endif


src/bubble.c
#include <bubble.h>

/*
 * This method will sort the list of items that it is given using the simple
 * yet slow Bubble sort algorithm.
 */
char** bsort(const unsigned int count, char** values) {
  unsigned int i, j, moveCount = 0, swapCount = 0;
  char* tmp;
  printf("sorting a list of %i values\n", count);
  for(j=count; j > 0; j--) {
    for(i = 0; i < j - 1; i++) {
      printf("\n%i:\tcomparing %s to %s ", moveCount++, values[i], values[i+1]);
      if(strcmp(values[i], values[i + 1]) > 0) {
        swap((const char**) values, (const unsigned int) i);
        ++swapCount;
      }
    }
  }
  printf("\nsorting %i items required %i swaps",
    count, swapCount);
  return values;
}

/**
 * Swap the string at values[idx] with values[idx+1]
 */
void swap(const char** values, const unsigned int idx) {
  const char* tmp = (const char*)values[idx];
  values[idx] = values[idx + 1];
  values[idx + 1] = tmp;
  printf("swap made");
}
try
  1. make
  2. bin/sorting bubble 9 8 7 6 5 4 3 2 1 0
the output should look like
method: 0 -> bubble
sorting a list of 10 values

0: comparing 9 to 8 swap made
1: comparing 9 to 7 swap made
2: comparing 9 to 6 swap made
3: comparing 9 to 5 swap made
4: comparing 9 to 4 swap made
5: comparing 9 to 3 swap made
6: comparing 9 to 2 swap made
7: comparing 9 to 1 swap made
8: comparing 9 to 0 swap made
9: comparing 8 to 7 swap made
10: comparing 8 to 6 swap made
11: comparing 8 to 5 swap made
12: comparing 8 to 4 swap made
13: comparing 8 to 3 swap made
14: comparing 8 to 2 swap made
15: comparing 8 to 1 swap made
16: comparing 8 to 0 swap made
17: comparing 7 to 6 swap made
18: comparing 7 to 5 swap made
19: comparing 7 to 4 swap made
20: comparing 7 to 3 swap made
21: comparing 7 to 2 swap made
22: comparing 7 to 1 swap made
23: comparing 7 to 0 swap made
24: comparing 6 to 5 swap made
25: comparing 6 to 4 swap made
26: comparing 6 to 3 swap made
27: comparing 6 to 2 swap made
28: comparing 6 to 1 swap made
29: comparing 6 to 0 swap made
30: comparing 5 to 4 swap made
31: comparing 5 to 3 swap made
32: comparing 5 to 2 swap made
33: comparing 5 to 1 swap made
34: comparing 5 to 0 swap made
35: comparing 4 to 3 swap made
36: comparing 4 to 2 swap made
37: comparing 4 to 1 swap made
38: comparing 4 to 0 swap made
39: comparing 3 to 2 swap made
40: comparing 3 to 1 swap made
41: comparing 3 to 0 swap made
42: comparing 2 to 1 swap made
43: comparing 2 to 0 swap made
44: comparing 1 to 0 swap made
sorting 10 items required 45 swaps
0
1
2
3
4
5
6
7
8
9
As you can see straight away it does take a lot of swapping to sort a relatively simple list

No comments:

Post a Comment