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
MartinBG avatar MartinBG 4803 Точки

Моето тълкувание на заданието е, че start и end индексите влизат в обвхата на сортирането. Има къде да се подведе човек в условието, но аз реших да подходя от практическа гледна точка при имплементацията и да позволя сортиране на целия масив (start-end включително), което няма да е възможно, ако сортирането започва  от start+1 и завършва в end-1.

0
krasio12356 avatar krasio12356 19 Точки

Условието е еднозначно. Стар и енд - 1 влизат. Енд не влиза. То в началото пише точно това.

Ако старт е 2, а енд е 6 да речем, значи трябва да се сортират от 2 до 5 включително. 

0
krasio12356 avatar krasio12356 19 Точки

 from
arr[start] to arr[end – 1]

 

0
Dimitar_Petkov_Petkov avatar Dimitar_Petkov_Petkov 169 Точки

Според мен, MartinBG е прав. В случая наистина трябва да се включат в сортирането и  числата на  start и end. А това до end - 1 е подсказка да се използва прословутия метод на балончето за  сортиране (Bubble Sort Algorithm).

0
darealex avatar darealex 2 Точки

ако имаше входни и изходни данни за пример лесно щях те да се орентирате как да ги направите. 
Курса е на българиски домашното е на английски език.  

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

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 921 Точки

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

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.