Другие языки программирования и технологии

Поправить сортировку по алфавиту c++

#include
using namespace std;
const int N = 7;

int main ()
{
setlocale(LC_ALL, "Russian");
int a = 0;
char* massiv[N] = {"Приставка", "Просто", "Правота", "Пила", "Прабабушка", "Папа", "Абзац"};
for (int i=0; i<7; i++)
for (int j=0; j<4; j++)
for (int k=i+1; k<7; k++)
if (massiv[i][j] > massiv[k][j])
{
char* temp;
temp = massiv[k];
massiv[k] = massiv[i];
massiv[i] = temp;
}
for (int i=0; i<7; i++)
cout << massiv[i];
system("pause");
return 0;
}
Не могу понять в чем ошибка в сортировке
Проблема в циклах! А в частности как я вижу у вас идет сортировка 4 буквы. Потому что надо как то останавливать цикл с j, если вы на предыдущем нашли какая из букв меньше.
Амур Мухамедвалиев
Амур Мухамедвалиев
15 388
Лучший ответ
Амур Мухамедвалиев Как вариант, создать булевую переменную и если иф отрабатывала во внутреннем цикле устанавливать в тру и break если тру во внешнем.
for (int i=0; i<7; i++)
{
comp = false;
for (int j=0; j<4; j++)
if(!comp)
for (int k=i+1; k<7; k++)
if (massiv[i][j] > massiv[k][j])
{
char* temp;
temp = massiv[k];
massiv[k] = massiv[i];
massiv[i] = temp;
comp = true;
}
}
Денис Белоглазов 1)Да у каждого слова проверяются только 4 буквы, так как есть слова с 4 буквами и больше.
Тоесть 1 буква первого слова с первой буквой второго слова
К сожалению что-то не так, дни недели подставил, рассортировались неправильно (
#include <iostream>
#include <string>
using namespace std;
typedef bool(*compare)(const string, const string);
void usort(string* begin, string* end, compare cmp);
bool increase(const string a, const string b);
bool decrease(const string a, const string b);
void uswap(string& a, string& b);
void print(string* words, const size_t size);
int main() {
setlocale(0, "");
string words[] = { "Приставка", "Просто", "Правота", "Пила", "Прабабушка", "Папа", "Абзац" };
size_t size = sizeof(words) / sizeof(words[0]);
print(words, size);
usort(words, words + size, increase);
print(words, size);
cin.get();
}
void print(string* words, const size_t size) {
for (size_t i = 0; i < size; ++i) cout << ' ' << words[i];
cout << endl;
}
void usort(string* begin, string* end, compare cmp) {
for (int n = 1; n < end - begin; ++n)
for (int m = 0; m < end - begin - n; ++m)
if ((*cmp)(begin[m], begin[m + 1]))
uswap(begin[m], begin[m + 1]);
}
bool increase(const string a, const string b) { return a > b; }
bool decrease(const string a, const string b) { return a < b; }
void uswap(string& a, string& b) {
string t = a;
a = b;
b = t;
}
Денис Белоглазов Большое спасибо за потраченное время и силы, постараюсь в нём разобраться, но я пока только начинающий, и этот код для меня выглядит запутанным и сложным для понимаю... Хотелось бы исправить ошибки или дополнить мой код, для понимания сего процесса