Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ алгоритм))

Автор: KOsTay 25.11.2010, 17:32

Была создана программа, которая должна выполнять сортировку массива x [0..n] по возврастанию, последующему алгоритму: на каждом шаке выбирается следующий по порядку элемент входных данных и вставляет на нужную позицию в уже отсортированном списке, до тех пол, пока набор входных данных не будет исчерпан. основная часть кода программы выглядет так:

1. НЦ ДЛЯ i ДО n
2. t: x[i]
3. НЦ ДЛЯ j ОТ 1 ДО i
4. k:=j
5. ЕСЛИ x[j-1]<=t
6. ТО ПРЕРВАТЬ ЦИКЛ
7. ВСЕ
8. x[j]:=[j-l]
9. k:=j-1
10. КЦ
11. x[k]:=t
12.КЦ

В КАКОЙ СТРОЧКЕ ОШИБКА?))[

Автор: Harch 26.11.2010, 13:43

А ваши мысли есть?

Автор: Botan 26.12.2010, 11:41

Я не знаю, где тут у вас ошибка, ибо мне непонятны некоторые ваши обозначения. А по сему привожу работостособный участок кода на С++

где то у вас должна быть прописана процедура swap, которая будет менять местами значения 2х переменных :

void swap(int &p, int &q)
{
int t = p;
p = q;
q= t;
}

а теперь собственно код:

for(int i = 0; i<n; ++i)
{
int tmp = i;
for(int j = i; j<n; ++j) //вот в этом цикле мы будем искать наименьшее из оставшихся значений
{ //и его номер положим в переменную tmp
if(a[j]<a[tmp])
{
tmp = j;
}
}
swap(a[i], a[tmp]);
}

Таким оборазом, у нас этот отсортированный кусок будет находится в начале массива, и с каждой итерацией внешнего цикла он будет увеличиватся на 1 элемент.
З.Ы. еслисвы програмируете на паскале, то думаю вам не составит труда перпевести этот код с С на паскаль.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)