| 127 | | |
| 128 | | /** |
| 129 | | * Bubble sort algorithm. |
| 130 | | * |
| 131 | | * @param array the array to sort |
| 132 | | */ |
| 133 | | public function bubble_sort(&$array) |
| 134 | | { |
| 135 | | $size = count($array); |
| 136 | | do |
| 137 | | { |
| 138 | | $swapped = FALSE; |
| 139 | | $size--; |
| 140 | | for ($i = 0; $i < $size; $i++) |
| 141 | | { |
| 142 | | if ($array[$i] > $array[$i+1]) |
| 143 | | { |
| 144 | | // Swap the values |
| 145 | | $temp = $array[$i+1]; |
| 146 | | $array[$i+1] = $array[$i]; |
| 147 | | $array[$i] = $temp; |
| 148 | | $swapped = TRUE; |
| 149 | | } |
| 150 | | } |
| 151 | | } while ($swapped); |
| 152 | | } |
| 153 | | |
| 154 | | /** |
| 155 | | * Insertion sort algorithm. |
| 156 | | * |
| 157 | | * @param array the array to sort |
| 158 | | */ |
| 159 | | public function insertion_sort(&$array) |
| 160 | | { |
| 161 | | for ($i = 0; $i < count($array); $i++) |
| 162 | | { |
| 163 | | $value = $array[$i]; |
| 164 | | $j = $i - 1; |
| 165 | | while ($j >= 0 AND $array[$j] > $value) |
| 166 | | { |
| 167 | | $array[$j+1] = $array[$j]; |
| 168 | | $j--; |
| 169 | | } |
| 170 | | $array[$j+1] = $value; |
| 171 | | } |
| 172 | | } |
| 173 | | |
| 174 | | /** |
| 175 | | * Quick sort algorithm. |
| 176 | | * |
| 177 | | * @param array the array to sort |
| 178 | | * @param integer low position to start at |
| 179 | | * @param integer high position to start at |
| 180 | | * @param integer minumum number of items to sort. If below the value, we go to insertion sort since its faster on small datasets |
| 181 | | */ |
| 182 | | public function quick_sort(&$array, $low_pos, $high_pos, $cutoff = 1500) |
| 183 | | { |
| 184 | | // Quick sort is actually slow on small data sets |
| 185 | | if($low_pos + $cutoff > $high_pos) |
| 186 | | { |
| 187 | | self::insertion_sort($array); |
| 188 | | } |
| 189 | | else |
| 190 | | { |
| 191 | | $left = $low_pos; |
| 192 | | $right = $high_pos; |
| 193 | | $pivot = $array[$left]; |
| 194 | | while ($left < $right) |
| 195 | | { |
| 196 | | while (($array[$right] >= $pivot) && ($left < $right)) |
| 197 | | { |
| 198 | | $right--; |
| 199 | | } |
| 200 | | if ($left != $right) |
| 201 | | { |
| 202 | | $array[$left] = $array[$right]; |
| 203 | | $left++; |
| 204 | | } |
| 205 | | while (($array[$left] <= $pivot) && ($left < $right)) |
| 206 | | { |
| 207 | | $left++; |
| 208 | | if ($left != $right) |
| 209 | | { |
| 210 | | $array[$right] = $array[$left]; |
| 211 | | $right--; |
| 212 | | } |
| 213 | | } |
| 214 | | $array[$left] = $pivot; |
| 215 | | $pivot = $left; |
| 216 | | if ($low_pos < $pivot) |
| 217 | | { |
| 218 | | self::qsort($array, $low_pos, $pivot, $cutoff); |
| 219 | | } |
| 220 | | if ($high_pos > $pivot) |
| 221 | | { |
| 222 | | self::qsort($array, $pivot+1, $high_pos, $cutoff); |
| 223 | | } |
| 224 | | } |
| 225 | | } |
| 226 | | } |
| 227 | | |
| 228 | | /** |
| 229 | | * Selection sort algorithm. |
| 230 | | * |
| 231 | | * @param array the array to sort |
| 232 | | */ |
| 233 | | public function selection_sort(&$array) |
| 234 | | { |
| 235 | | |
| 236 | | } |
| 237 | | |
| 238 | | /** |
| 239 | | * Merge sort algorithm. |
| 240 | | * |
| 241 | | * @param array the array to sort |
| 242 | | */ |
| 243 | | public function merge_sort(&$array) |
| 244 | | { |
| 245 | | |
| 246 | | } |