Алгоритм InsertionSort, что не так с моим кодом?

Я пробую алгоритм InsertSort для ввода строк, хранящихся в векторе.

Что я делаю, это для ввода некоторых строк в вектор,
Затем я использую вставки сортировки векторов.

Но я не уверен, почему это не работает! Кто-нибудь может указать мне правильное направление?

#include <iostream>
#include <cstring>
#include <vector>
#include <cstdlib>
using namespace std;

int main (){
vector <string> names; //vector to store
string input; //input is the variable of strings

cout<<"Input a list of names \n";
cout<<"To end the list type 'END'" <<endl;

while (true){
getline(cin, input);

if (input =="END")
break;

names.push_back(input); //push into vector names
}//my insertsort starts here
string temp;
int i;
for (int j = 1; j < names.size(); j++){
i = j - 1;

while ((i>0) && (names[i]>names[j]) ) {

names[i+1] = names[i];

i=i-1;
}

names[i+1] = names[j];

}for (unsigned int i = 0; i<names.size (); i++)
cout<<names[i]<<endl;
cout<<endl;
system("pause");
}

Огромное спасибо

РЕДАКТИРОВАТЬ:
Я буду вводить строки, например, я буду набирать:

Питер
яблоко
Кролик

И мой желаемый результат в алфавитном порядке:

яблоко
Питер
Кролик

На данный момент с примером ввода я получаю:
Питер
яблоко
Кролик

РЕДАКТИРОВАТЬ 3:

Моя вставка сортировки теперь выглядит так:

 string temp;
int i;
for (int j = 1; j < names.size(); j++){
i = j - 1;
temp = names[j];

while ((i>=0) && (names[i]>names[j]) ) {
names[i+1] = names[i];
i=i-1;
}

names[i+1] = temp;
}

0

Решение

Вы пропустили одно очко:

 //You have to remember names[j] before while loop
//the variable temp is never used
temp = names[j];
while ((i>=0) && (names[i]>temp) ) {
names[i+1] = names[i];
i=i-1;
}
names[i+1] = temp;
// since names[j] was already been filled by other words during swapping

Если не требуется использовать сортировку вставками, лучше использовать алгоритм сортировки stl.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]