Софтуерно Инженерство
Loading...
gydigydi avatar gydigydi 12 Точки

Задача 3 от Memory Аccess and Мanagement c++

Write a void selectionSort(int a[], int start, int end)
function that uses the selection sort algorithm to sort the elements from
arr[start] to arr[end – 1] in increasing order (the elements outside
the [start, end) range shouldn’t be sorted). This function modifies the
array, so that the elements between start and end are sorted.


Selection sort: in this case it would just find the smallest element between start and end,
and place it at the start, then find the next smallest between the remaining (aka start + 1
Нand end) and place it at the next position (aka start + 1) and so on

 

Не ми е ясно позициите старт и енд трябва ли да влизат в сортирането или не? Ако е само "между" защо трябва да се поставя най малкото число от "между" на позиция старт а не на старт+1?

Тъмна Индия....

 

 

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 917 Точки

start влиза, end не влиза, както е написано в първото изречение. Ако има нещо, което може да е двусмислено в една задача, както думата between в случая, обикновено е най-добре да вземате за вярно най-формално написаното изречение (особено ако е първото, а другите имат характер на разяснения).

Идеята за интервала [start, end-1) е, че в много функции от стандартната библиотека на C++ (ще ги говорим в STL лекцията) интервалите се задават в този формат. Например, като говорихме за pointers споменахме как можете да ползвате std::sort и там е точно такъв тип интервал - стартов елемент, който влиза, и "краен" индекс (итератор всъщност), който не влиза. Ако сортирате цял масив int arr[5] = ... със std::sort, на sort му подавате (a, a + 5), въпреки, че а + 5 на практика е "извън" масива, защото последния индекс е 4. Оттам и тази задача донякъде има за цел да свикнете с този синтаксис, като напишете функция, която работи с него.

Тази конвенция за интервали (независимо за какво) я има и в доста други програмни езици. Най-вероятно причините за това са разнообразни, но може би основното е, че когато пишеш цикъл няма нужда да правиш <= (по-малко или равно) а е достатъчно да напишеш < (по-малко), ако ползваш тази конвенция. Не толкова заради броя проверки, а по-скоро защото е лесно да пропуснеш "равно"-то на "по-малко или равно" и да не забележиш.

Поздрави,

Жоро

1
neli.dimitrova avatar neli.dimitrova 0 Точки

А какви трябва да са примерните вход и изход?

0
georgi.stef.georgiev avatar georgi.stef.georgiev 917 Точки

Каквито прецените, че ви е удобно, тази задача не изисква вход-изход от конзолата, изисква написване на функция. Достатъчно е просто да напишете вярно функцията и оттам нататък може да я тествате дори и без вход/изход от конзолата, а само като я повикате директно от main с някакви примерни данни и видите дали резултатът е вярно сортиран.

0