首页 > 解决方案 > 随机字符串数组的选择排序

问题描述

我正在尝试创建一个选择排序算法,该算法接受一组随机字符串并对其进行排序。我已经在网上和我的书中查看过,试图用它来模拟我的代码,这就是我想出的。我不确定我哪里出错了,任何帮助将不胜感激。

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

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

标签: c++algorithmvisual-studiosortingselection-sort

解决方案


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

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

推荐阅读