Listing 3

for (incr = n; swap != 0 || incr > 1; incr= (incr + 1) / 2) {
  swap = 1;
  while (swap != 0) {
    swap = 0;
    for (i = 0; i < n - incr; i++)
      if (x[i] > x[i + incr]) {
        tmp = x[i];
        x[i] = x[i + incr];
        x[i + incr] = tmp;
        swap = 1;
      }
    }
  }