1 65 66 67 package org.hsqldb.lib; 68 69 public class Sort { 70 71 82 public static final void sort(Object [] w, ObjectComparator comparator, 83 int l, int r) { 84 85 int i; 86 int j; 87 Object p; 88 89 if (l > r) { 90 return; 91 } 92 93 while (r - l > 10) { 94 i = (r + l) >> 1; 95 96 if (comparator.compare(w[l], w[r]) > 0) { 97 swap(w, l, r); 98 } 99 100 if (comparator.compare(w[i], w[l]) < 0) { 101 swap(w, l, i); 102 } else if (comparator.compare(w[i], w[r]) > 0) { 103 swap(w, i, r); 104 } 105 106 j = r - 1; 107 108 swap(w, i, j); 109 110 p = w[j]; 111 i = l; 112 113 while (true) { 114 while (comparator.compare(w[++i], p) < 0) { 115 ; 116 } 117 118 while (comparator.compare(w[--j], p) > 0) { 119 ; 120 } 121 122 if (i >= j) { 123 break; 124 } 125 126 swap(w, i, j); 127 } 128 129 swap(w, i, r - 1); 130 sort(w, comparator, l, i - 1); 131 132 l = i + 1; 133 } 134 135 for (i = l + 1; i <= r; i++) { 136 Object t = w[i]; 137 138 for (j = i - 1; j >= l && comparator.compare(w[j], t) > 0; j--) { 139 w[j + 1] = w[j]; 140 } 141 142 w[j + 1] = t; 143 } 144 } 145 146 149 private static void swap(Object [] w, int a, int b) { 150 151 Object t = w[a]; 152 153 w[a] = w[b]; 154 w[b] = t; 155 } 156 157 public static class StringComparator implements ObjectComparator { 158 159 public int compare(Object a, Object b) { 160 161 if (a == b) { 163 return 0; 164 } 165 166 if (a == null) { 167 return -1; 168 } 169 170 if (b == null) { 171 return 1; 172 } 173 174 return ((String ) a).compareTo((String ) b); 175 } 176 } 177 } 178 | Popular Tags |