mergesort — лексикографический порядок с сортировкой слиянием в переполнении стека

Я написал такую ​​структуру

struct country {
string country_name;
int population;
int gdp;
...
};
country c;

Я хочу написать функцию, которая сортирует страны в алфавитном порядке, вот что я написал:

void mergesort(string c.country_name left, string c.country_name right)
if(left < right)
center = (left+right)/2;
mergesort(left, center)
mergesort(center+1, right)
mergesort(left, center, right)

Я знаю, что с параметрами функции что-то не так, но если c.country_name left и c.country_name right неверны, как я могу сообщить компьютеру, что c.country_name left — это первое имя, а c.country_name right — последний?

Прежде чем кто-то спросит, да, это домашняя работа, и да, я все еще изучаю основы, поэтому, пожалуйста, не будьте грубыми. Благодарю.

-5

Решение

Написание сортировки слиянием трудно для начинающих. Вы уверены, что должны реализовать сортировку самостоятельно? Вы не можете использовать предопределенный std::sort()? Если можете, используйте это так:

#include <algorithm>
#include <string>
using namespace std;

struct country {
string country_name;
int population;
int gdp;

//You need this line in your struct to express that you want to sort countries on country_name, not population or gdp
bool operator<(const country& r) const { return country_name < r.country_name; }
};

//You should test your structs and methods in a main method
int main() {
const int SIZE = 3;
country countryArray[SIZE];

countryArray[0].country_name = "Brazil";
countryArray[1].country_name = "Argentina";
countryArray[2].country_name = "Chile";

//This is the predefined std::sort(), it knows to sort on country_name because we overloaded the '<' operator in the struct
sort(countryArray, countryArray + SIZE);

//We just print all the country names to see if we got the homework right or not
for (int i=0; i<SIZE; i++){
cout<<countryArray[i].country_name<<endl;
}

//You might want to have this line in the end of the code to prevent the command line window from exiting
getchar();

return 0;
}

Вот несколько простых упражнений для вас, которые я рекомендую делать, чтобы понять больше и стать лучше:

  1. Напишите функцию, которая принимает страну в качестве параметра и печатает каждую информацию о ней
  2. Напишите функцию, которая принимает две страны в качестве параметров и печатает, которая имеет больше населения.
  3. Измените этот код, чтобы страны были в обратном порядке. (Чили, Бразилия, Аргентина)
0

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

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

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