排序算法
方法一:
template <class T, class LessThan> void selectionSort(T* array, int size, LessThan lt) { int i, j, best_i; T tmp; for (i = 0; i < size-1; i++){ best_i = i; for (j = i+1; j < size; j++){ if (lt(array[j], array[best_i])) best_i = j; } tmp = array[i]; array[i] = array[best_i]; array[best_i] = tmp; } }
方法二:
template<class T, class lessThan> void sort(T *array, int size, lessThan lt) { if (size <= 15)lt selectionSort(array, size, lt); else { T pivot = array[size / 2]; T temp; int i = -1; int j = size; for (;;) { do i++; while (lt(array[i], pivot)); do j--; while (lt(pivot, array[j])); if (i >= j) break; temp = array[i]; array[i] = array[j]; array[j] = temp; } sort(array, i, lt); sort(&array[i], size - i, lt); } }
浙公网安备 33010602011771号