Q: QuickSort acting funny I have a class WordList that contains a vector of strings (words). The vector is 88994 long and I'm trying to sort it using quick sort. When I run my code, it sorts it pretty well but some elements seem to be out of place. For instance, everything will be in alphabetical order but one word will be out of place... this occurs a couple of times. Is there anything I'm not implementing right?
void WordList::quickSort(int start, int end){
    if( start < end){
        int pivot = partition(start, end);
        quickSort(start, pivot-1);
        quickSort(pivot+1, end);
    }

}

int WordList::partition(int start, int end){
    int pivot = end;
    int leftList = start-1;
    for(int j = start; j < (end - 1); j++){
        if( LoWords[j].compare(LoWords[pivot]) <= -1){
            leftList++;
            string temp = LoWords[leftList];
            LoWords[leftList] = LoWords[j];
            LoWords[j] = temp;

        }
    }
    string anotherTemp = LoWords[leftList+1];
    LoWords[leftList+1] = LoWords[end];
    LoWords[end] = anotherTemp;

    return leftList+1;

}


A: I think you have to change your partition algorithm into something like this:
#include <iostream>
#include <vector>
#include <string>

using std::vector;
using std::string;

// I don't have your class, so I'll use a global variable to keep your signature
vector<string> words{
    "mouse", "APU", "CPU","mainboard", "SATA", "hard drive", "GPU", "fan", "case"
};

int partition( int start, int pivot ) {
    int i = start;
    int j = pivot - 1;
    while ( i <= j ) {
        if ( words[j] > words[pivot] ) {
            --j;
            continue;
        }
        if ( words[i] <= words[pivot] ) {
            ++i;
            continue;
        }
        if ( i < j ) {
            // You can use std::swap(words[i],words[j]); from <algorithm> instead
            auto temp = words[i];
            words[i] = words[j];
            words[j] = temp;
            ++i;
            --j;
        }
    }
    // or std::swap(words[pivot],words[j+1]);
    auto temp = words[pivot];
    words[pivot] = words[j + 1];
    words[j + 1] = temp;
    return j + 1;
}

void quickSort( int start, int end ) {
    if( start < end) {
        int pivot = partition(start, end);
        quickSort(start, pivot - 1);
        quickSort(pivot + 1, end);
    }
}

int main() {

    quickSort(0, words.size() - 1);

    for ( auto & i : words )
        std::cout << i << '\n';

    return 0;
}

EDIT
To make your function working, I think that you have to change the line
for(int j = start; j < (end - 1); j++) { ...

into
for(int j = start; j < end; j++) {...

