Вы сказали, что вам нужно использовать «сортировку выбора», но вы используете «пузырьковую сортировку». Я изменил вашу программу на обоих циклах (для), а также на обмен строк (движение).
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main() {
const int SIZE = 20;
string temp;
int i, j;
string arr[SIZE] = { "Collins, Bill", "Smith, Bart", "Michalski, Joe",
"Griffin, Jim","Sanchez, Manny", "Rubin, Sarah", "Taylor, Tyrone",
"Johnson, Jill","Allison, Jeff", "Moreno, Juan", "Wolfe, Bill",
"Whitman, Jean","Moretti, Bella", "Wu, Hong", "Patel, Renee",
"Harrison, Rose","Smith, Cathy", "Conroy, Pat", "Kelly, Sean", "Holland, Beth" };
for (i = 0; i < (SIZE - 1); i++)
{
for (j = (i+1); j < SIZE; j++)
{
if ( arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int j = 0; j < SIZE; j++) {
cout << arr[j] << endl;
}
system("pause");
return 0;
}
Истинный «сортировка выбора» имеет сложность сравнения O (n ^ 2) и сложность движения O (n). Я считаю, что правильный способ его реализации должен быть таким:
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main() {
const int SIZE = 20;
string temp;
int i, j;
string arr[SIZE] = { "Collins, Bill", "Smith, Bart", "Michalski, Joe",
"Griffin, Jim","Sanchez, Manny", "Rubin, Sarah", "Taylor, Tyrone",
"Johnson, Jill","Allison, Jeff", "Moreno, Juan", "Wolfe, Bill",
"Whitman, Jean","Moretti, Bella", "Wu, Hong", "Patel, Renee",
"Harrison, Rose","Smith, Cathy", "Conroy, Pat", "Kelly, Sean", "Holland, Beth" };
for (i = 0; i < (SIZE - 1); i++)
{
int k = i;
for (j = (i+1); j < SIZE; j++)
{
if ( arr[k] > arr[j])
{
k = j;
}
}
if (i != k) {
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
for (int j = 0; j < SIZE; j++) {
cout << arr[j] << endl;
}
system("pause");
return 0;
}
Объяснение кода: String - это класс C ++, который содержит массив символов. Оператор 'string arr [SIZE]' является массивом строк размером SIZE. Вы можете обратиться к строковому классу в 'http://www.cplusplus.com/reference/string/string/'.
Другая проблема в вашем коде касается порядка. «Сортировка выбора» сортирует список, сравнивая элемент с последующими элементами, поэтому ваш второй цикл неверен, это должно быть: 'for (j = (i + 1); j
Наконец, вам нужно сделать своп (движение) только после того, как вы прошли через весь j.