C++ 随机字符串数组的选择排序

C++ 随机字符串数组的选择排序,c++,algorithm,visual-studio,sorting,selection-sort,C++,Algorithm,Visual Studio,Sorting,Selection Sort,我正在尝试创建一个选择排序算法,该算法接收随机字符串数组并对其进行排序。 我在网上和我的书中找到了我的代码模型,这就是我想到的。我不知道我哪里出错了,任何帮助都将不胜感激 Here is how you load the array with the random strings: string Sorter::randomString() { string s = ""; for (int i = 0; i < MAX_CHARS; i++) { char

我正在尝试创建一个选择排序算法,该算法接收随机字符串数组并对其进行排序。 我在网上和我的书中找到了我的代码模型,这就是我想到的。我不知道我哪里出错了,任何帮助都将不胜感激

Here is how you load the array with the random strings:
string Sorter::randomString() {
    string s = "";
    for (int i = 0; i < MAX_CHARS; i++) {
        char randomChar = char(rand() % 26 + 97);
    s += randomChar;
    }
    return s;
}

void Sorter::load() {
    for (int i = 0; i < MAX_STRINGS; i++)
        workspace[i] = randomString();

Here is my selection sort: 

void Sorter::selectionSort() {
    for (int pass = 0; pass < MAX_STRINGS - 1; pass++) {
        string smallest = workspace[pass];
    for (int pos = pass + 1; pos < MAX_STRINGS - pass - 1; pos++) {
            if (workspace[pos] > smallest) {
                smallest = workspace[pos];
            }
            swap(workspace[pos], workspace[pass]);
        }
    }
}

我希望对数组工作区进行排序,但事实并非如此:

您的逻辑中有一点缺陷,即没有正确设置列表中的最小元素。您应该为此使用最小索引

void selectionSort() {
    //Initialise minimum index
    int min_id = 0;
    //Loop through unsorted subarray 
    for (int pass = 0; pass < MAX_STRINGS - 1; pass++) {
        //Find the minimum element in rest of array
        min_id = pass;
        for (int pos = pass + 1; pos < MAX_STRINGS; pos++) {
            if (workspace[pos] < workspace[min_id]) {
                min_id = pos;
            }
        }
        //Swap the minimum element with current element in array
        swap(workspace[min_id], workspace[pass]);
    }
}

在未排序的数组中找不到正确的最小元素。这是我的密码:

void selectionSort(char arr[][MAX_STRINGS], int n)
{
    int i, j, min_idx;

    // One by one move boundary of unsorted subarray  
    char minStr[MAX_STRINGS];
    for (i = 0; i < n - 1; i++)
    {
        // Find the minimum element in unsorted array  
        int min_idx = i;
        strcpy_s(minStr, arr[i]);
        for (j = i + 1; j < n; j++)
        {
            // If min is greater than arr[j]  
            if (strcmp(minStr, arr[j]) > 0)
            {
                // Make arr[j] as minStr and update min_idx  
                strcpy_s(minStr, arr[j]);
                min_idx = j;
            }
        }

        // Swap the found minimum element with the first element  
        if (min_idx != i)
        {
            char temp[MAX_STRINGS];
            strcpy_s(temp, arr[i]); //swap item[pos] and item[i]  
            strcpy_s(arr[i], arr[min_idx]);
            strcpy_s(arr[min_idx], temp);
        }
    }