Я работаю над домашним заданием для своего класса алгоритмов, и я ошеломлен тем, как работает этот конкретный алгоритм. Я уже нашел ответ в сети, поэтому я не ищу ответов, просто помогаю работать через код шаг за шагом. Из того, что я могу понять до сих пор, алгоритм принимает массив неопределенной длины и через несколько итераций, сортирует числа, сравнивая отдельный элемент с меньшими элементами в массиве. В конце итераций он присваивает каждому элементу индекс местоположения, который указывает, в каком порядке должны быть упорядочены элементы, чтобы быть в неубывающем порядке. Но я не могу понять, как второй цикл for-do запускает итерацию после завершения первого цикла? Любая помощь будет принята с благодарностьюПсевдокод для алгоритма подсчета сравнений
Вопрос: Рассмотрим алгоритм для задачи сортировки, которая сортирует массив путем подсчета, для каждого из его элементов, число мелких элементов, а затем использует эту информацию, чтобы поместить элемент его подходящее положение в сортированном массиве. Сортировка следующий список номеров, (60, 35, 81, 98, 14, 47):
Algorithm ComparisonCountingSort(A[0..n − 1], S[0..n − 1])
//Sorts an array by comparison counting
//Input: Array A[0..n − 1] of orderable values
//Output: Array S[0..n − 1] of A’s elements sorted in nondecreasing order
for i ← 0 to n − 1 do
Count[i] ← 0
for i ← 0 to n − 2 do
for j ← i + 1 to n − 1 do
if A[i] < A[j]
Count[j] ← Count[j] + 1
else
Count[i] ← Count[i] + 1
for i ← 0 to n − 1 do
S[Count[i]] ← A[i]
return S
Можете ли вы отформатировать код немного лучше, пожалуйста? Вам не нужны скобки, если отступы являются правильными, но на данный момент я не могу определить, являются ли эти вложенные форы или что. – Compass
@Compass, я надеюсь, что это поможет, спасибо – user2827137
Второй цикл не начинается после завершения первого, второй для цикла один ** вложен ** на первый на самом деле. – Fallen