排序算法

方法一:

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);
        }
    }

 

posted on 2021-01-21 17:13  QzZq  阅读(54)  评论(0)    收藏  举报

导航