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

Selection Sort of a Array of random strings

本文关键字:排序 数组 字符串 随机 选择      更新时间:2023-10-16

我正在尝试创建一个选择排序算法,该算法接受一个随机字符串数组并对其进行排序。我在网上和我的书中都试着用它来建模我的代码,这就是我想到的。我不确定我哪里出了问题,如果有任何帮助,我们将不胜感激。

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