- static int new_gap (int gap)
- {
- gap = (gap * 10) / 13;
- if (gap == 9 || gap == 10)
- return 11;
- if (gap < 1)
- return 1;
- return gap;
- }
-
- /* we use combsort because it's fast enough and very small, since we have
- * several specialized versions here.
- */
- static void combsort (double[] array, int start, int size, Swapper swap_items)
- {
- int gap = size;
- while (true) {
- gap = new_gap (gap);
- bool swapped = false;
- int end = start + size - gap;
- for (int i = start; i < end; i++) {
- int j = i + gap;
- if (array [i] > array [j]) {
- double val = array [i];
- array [i] = array [j];
- array [j] = val;
- swapped = true;
- if (swap_items != null)
- swap_items (i, j);
- }
- }
- if (gap == 1 && !swapped)
- break;
- }
- }
-
- static void combsort (int[] array, int start, int size, Swapper swap_items)
- {
- int gap = size;
- while (true) {
- gap = new_gap (gap);
- bool swapped = false;
- int end = start + size - gap;
- for (int i = start; i < end; i++) {
- int j = i + gap;
- if (array [i] > array [j]) {
- int val = array [i];
- array [i] = array [j];
- array [j] = val;
- swapped = true;
- if (swap_items != null)
- swap_items (i, j);
- }
- }
- if (gap == 1 && !swapped)
- break;
- }
- }
-
- static void combsort (char[] array, int start, int size, Swapper swap_items)
- {
- int gap = size;
- while (true) {
- gap = new_gap (gap);
- bool swapped = false;
- int end = start + size - gap;
- for (int i = start; i < end; i++) {
- int j = i + gap;
- if (array [i] > array [j]) {
- char val = array [i];
- array [i] = array [j];
- array [j] = val;
- swapped = true;
- if (swap_items != null)
- swap_items (i, j);
- }
- }
- if (gap == 1 && !swapped)
- break;
- }
- }
-